From 0c95b5ec91f4ac40869bd38bc503706f7a7a0e58 Mon Sep 17 00:00:00 2001 From: 0xsysr3ll <31414959+0xSysR3ll@users.noreply.github.com> Date: Mon, 5 Jan 2026 10:54:31 +0100 Subject: [PATCH] fix(migration): add cleanup step for duplicate push subscriptions before enforcing unique constraint (#2269) Signed-off-by: 0xsysr3ll <0xsysr3ll@pm.me> --- ...765233385034-AddUniqueConstraintToPushSubscription.ts | 9 +++++++++ ...765233385034-AddUniqueConstraintToPushSubscription.ts | 9 +++++++++ 2 files changed, 18 insertions(+) diff --git a/server/migration/postgres/1765233385034-AddUniqueConstraintToPushSubscription.ts b/server/migration/postgres/1765233385034-AddUniqueConstraintToPushSubscription.ts index af245cfd..bcb79d45 100644 --- a/server/migration/postgres/1765233385034-AddUniqueConstraintToPushSubscription.ts +++ b/server/migration/postgres/1765233385034-AddUniqueConstraintToPushSubscription.ts @@ -6,6 +6,15 @@ export class AddUniqueConstraintToPushSubscription1765233385034 name = 'AddUniqueConstraintToPushSubscription1765233385034'; public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + DELETE FROM "user_push_subscription" + WHERE id NOT IN ( + SELECT MAX(id) + FROM "user_push_subscription" + GROUP BY "endpoint", "userId" + ) + `); + await queryRunner.query( `ALTER TABLE "user_push_subscription" ADD CONSTRAINT "UQ_6427d07d9a171a3a1ab87480005" UNIQUE ("endpoint", "userId")` ); diff --git a/server/migration/sqlite/1765233385034-AddUniqueConstraintToPushSubscription.ts b/server/migration/sqlite/1765233385034-AddUniqueConstraintToPushSubscription.ts index 48a8c6d6..c0ef0fc5 100755 --- a/server/migration/sqlite/1765233385034-AddUniqueConstraintToPushSubscription.ts +++ b/server/migration/sqlite/1765233385034-AddUniqueConstraintToPushSubscription.ts @@ -6,6 +6,15 @@ export class AddUniqueConstraintToPushSubscription1765233385034 name = 'AddUniqueConstraintToPushSubscription1765233385034'; public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + DELETE FROM "user_push_subscription" + WHERE id NOT IN ( + SELECT MAX(id) + FROM "user_push_subscription" + GROUP BY "endpoint", "userId" + ) + `); + await queryRunner.query( `CREATE UNIQUE INDEX "UQ_6427d07d9a171a3a1ab87480005" ON "user_push_subscription" ("endpoint", "userId")` );