Skip to content

Commit 05ac034

Browse files
committed
fix: reset processing state when reactivating soft-deleted mailing list (CM-1318)
Signed-off-by: Uroš Marolt <uros@marolt.me>
1 parent 2c49057 commit 05ac034

1 file changed

Lines changed: 22 additions & 1 deletion

File tree

  • services/libs/data-access-layer/src/mailinglist

services/libs/data-access-layer/src/mailinglist/index.ts

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,14 @@ export async function upsertMailingLists(
9191

9292
const rows = await qx.select(
9393
`
94-
WITH upserted_list AS (
94+
WITH existing AS (
95+
SELECT id, "deletedAt"
96+
FROM mailinglist.lists
97+
WHERE "sourceUrl" IN (
98+
SELECT v."sourceUrl" FROM json_to_recordset($(lists)::json) AS v(name text, "sourceUrl" text)
99+
)
100+
),
101+
upserted_list AS (
95102
INSERT INTO mailinglist.lists (id, name, "sourceUrl", "segmentId", "integrationId", "createdAt", "updatedAt")
96103
SELECT uuid_generate_v4(), v.name, v."sourceUrl", $(segmentId)::uuid, $(integrationId)::uuid, NOW(), NOW()
97104
FROM json_to_recordset($(lists)::json) AS v(name text, "sourceUrl" text)
@@ -103,6 +110,20 @@ export async function upsertMailingLists(
103110
"updatedAt" = NOW()
104111
RETURNING id
105112
),
113+
-- A previously soft-deleted list being re-onboarded must not resume from
114+
-- its old owner's checkpoint, so reset processing state on reactivation.
115+
reset_processing AS (
116+
UPDATE mailinglist."listProcessing" lp
117+
SET state = 'pending',
118+
"lastProcessedHeads" = '{}'::jsonb,
119+
"lockedAt" = NULL,
120+
"lastProcessedAt" = NULL,
121+
"updatedAt" = NOW()
122+
FROM upserted_list ul
123+
JOIN existing e ON e.id = ul.id
124+
WHERE lp."listId" = ul.id
125+
AND e."deletedAt" IS NOT NULL
126+
),
106127
seed_processing AS (
107128
INSERT INTO mailinglist."listProcessing" ("listId", state, priority, "lastProcessedHeads", "createdAt", "updatedAt")
108129
SELECT id, 'pending', 2, '{}'::jsonb, NOW(), NOW()

0 commit comments

Comments
 (0)