diff --git a/server/entity/UserPushSubscription.ts b/server/entity/UserPushSubscription.ts index b3c4d5d2b..e35a01548 100644 --- a/server/entity/UserPushSubscription.ts +++ b/server/entity/UserPushSubscription.ts @@ -1,8 +1,15 @@ import { DbAwareColumn } from '@server/utils/DbColumnHelper'; -import { Column, Entity, ManyToOne, PrimaryGeneratedColumn } from 'typeorm'; +import { + Column, + Entity, + ManyToOne, + PrimaryGeneratedColumn, + Unique, +} from 'typeorm'; import { User } from './User'; @Entity() +@Unique(['endpoint', 'user']) export class UserPushSubscription { @PrimaryGeneratedColumn() public id: number; diff --git a/server/migration/postgres/1765233385034-AddUniqueConstraintToPushSubscription.ts b/server/migration/postgres/1765233385034-AddUniqueConstraintToPushSubscription.ts new file mode 100644 index 000000000..af245cfd6 --- /dev/null +++ b/server/migration/postgres/1765233385034-AddUniqueConstraintToPushSubscription.ts @@ -0,0 +1,19 @@ +import type { MigrationInterface, QueryRunner } from 'typeorm'; + +export class AddUniqueConstraintToPushSubscription1765233385034 + implements MigrationInterface +{ + name = 'AddUniqueConstraintToPushSubscription1765233385034'; + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "user_push_subscription" ADD CONSTRAINT "UQ_6427d07d9a171a3a1ab87480005" UNIQUE ("endpoint", "userId")` + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "user_push_subscription" DROP CONSTRAINT "UQ_6427d07d9a171a3a1ab87480005"` + ); + } +} diff --git a/server/migration/sqlite/1765233385034-AddUniqueConstraintToPushSubscription.ts b/server/migration/sqlite/1765233385034-AddUniqueConstraintToPushSubscription.ts new file mode 100755 index 000000000..48a8c6d65 --- /dev/null +++ b/server/migration/sqlite/1765233385034-AddUniqueConstraintToPushSubscription.ts @@ -0,0 +1,17 @@ +import type { MigrationInterface, QueryRunner } from 'typeorm'; + +export class AddUniqueConstraintToPushSubscription1765233385034 + implements MigrationInterface +{ + name = 'AddUniqueConstraintToPushSubscription1765233385034'; + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `CREATE UNIQUE INDEX "UQ_6427d07d9a171a3a1ab87480005" ON "user_push_subscription" ("endpoint", "userId")` + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`DROP INDEX "UQ_6427d07d9a171a3a1ab87480005"`); + } +}