From 1374f30ca9337f1a798998b341578f013ba04be4 Mon Sep 17 00:00:00 2001 From: 0xsysr3ll <0xsysr3ll@pm.me> Date: Mon, 21 Apr 2025 22:10:01 +0200 Subject: [PATCH] fix(migration): add missing plex profiles fields and constraints --- ...> 1745265840052-AddPlexProfilesSupport.ts} | 22 +++++++- .../1745254842580-AddPlexProfilesSupport.ts | 51 ------------------ .../1745265825619-AddPlexProfilesSupport.ts | 53 +++++++++++++++++++ 3 files changed, 73 insertions(+), 53 deletions(-) rename server/migration/postgres/{1745254842580-AddPlexProfilesSupport.ts => 1745265840052-AddPlexProfilesSupport.ts} (61%) delete mode 100644 server/migration/sqlite/1745254842580-AddPlexProfilesSupport.ts create mode 100644 server/migration/sqlite/1745265825619-AddPlexProfilesSupport.ts diff --git a/server/migration/postgres/1745254842580-AddPlexProfilesSupport.ts b/server/migration/postgres/1745265840052-AddPlexProfilesSupport.ts similarity index 61% rename from server/migration/postgres/1745254842580-AddPlexProfilesSupport.ts rename to server/migration/postgres/1745265840052-AddPlexProfilesSupport.ts index 9c17c45e..624497a4 100644 --- a/server/migration/postgres/1745254842580-AddPlexProfilesSupport.ts +++ b/server/migration/postgres/1745265840052-AddPlexProfilesSupport.ts @@ -1,9 +1,15 @@ import type { MigrationInterface, QueryRunner } from 'typeorm'; -export class AddPlexProfilesSupport1745254842580 implements MigrationInterface { - name = 'AddPlexProfilesSupport1745254842580'; +export class AddPlexProfilesSupport1745265840052 implements MigrationInterface { + name = 'AddPlexProfilesSupport1745265840052'; public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "user_push_subscription" ADD "userAgent" character varying` + ); + await queryRunner.query( + `ALTER TABLE "user_push_subscription" ADD "createdAt" TIMESTAMP DEFAULT now()` + ); await queryRunner.query( `ALTER TABLE "user" ADD "plexProfileId" character varying` ); @@ -20,9 +26,15 @@ export class AddPlexProfilesSupport1745254842580 implements MigrationInterface { await queryRunner.query( `ALTER TABLE "blacklist" ADD "blacklistedTags" character varying` ); + await queryRunner.query( + `ALTER TABLE "user_push_subscription" DROP CONSTRAINT "UQ_f90ab5a4ed54905a4bb51a7148b"` + ); } public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "user_push_subscription" ADD CONSTRAINT "UQ_f90ab5a4ed54905a4bb51a7148b" UNIQUE ("auth")` + ); await queryRunner.query( `ALTER TABLE "blacklist" DROP COLUMN "blacklistedTags"` ); @@ -31,5 +43,11 @@ export class AddPlexProfilesSupport1745254842580 implements MigrationInterface { await queryRunner.query(`ALTER TABLE "user" DROP COLUMN "mainPlexUserId"`); await queryRunner.query(`ALTER TABLE "user" DROP COLUMN "isPlexProfile"`); await queryRunner.query(`ALTER TABLE "user" DROP COLUMN "plexProfileId"`); + await queryRunner.query( + `ALTER TABLE "user_push_subscription" DROP COLUMN "createdAt"` + ); + await queryRunner.query( + `ALTER TABLE "user_push_subscription" DROP COLUMN "userAgent"` + ); } } diff --git a/server/migration/sqlite/1745254842580-AddPlexProfilesSupport.ts b/server/migration/sqlite/1745254842580-AddPlexProfilesSupport.ts deleted file mode 100644 index abceaf2e..00000000 --- a/server/migration/sqlite/1745254842580-AddPlexProfilesSupport.ts +++ /dev/null @@ -1,51 +0,0 @@ -import type { MigrationInterface, QueryRunner } from 'typeorm'; - -export class AddPlexProfilesSupport1745254842580 implements MigrationInterface { - name = 'AddPlexProfilesSupport1745254842580'; - - public async up(queryRunner: QueryRunner): Promise { - await queryRunner.query( - `CREATE TABLE "temporary_user_push_subscription" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "endpoint" varchar NOT NULL, "p256dh" varchar NOT NULL, "auth" varchar NOT NULL, "userId" integer, "userAgent" varchar, "createdAt" datetime DEFAULT (datetime('now')), CONSTRAINT "UQ_f90ab5a4ed54905a4bb51a7148b" UNIQUE ("auth"), CONSTRAINT "FK_03f7958328e311761b0de675fbe" FOREIGN KEY ("userId") REFERENCES "user" ("id") ON DELETE CASCADE ON UPDATE NO ACTION)` - ); - await queryRunner.query( - `INSERT INTO "temporary_user_push_subscription"("id", "endpoint", "p256dh", "auth", "userId", "userAgent", "createdAt") SELECT "id", "endpoint", "p256dh", "auth", "userId", "userAgent", "createdAt" FROM "user_push_subscription"` - ); - await queryRunner.query(`DROP TABLE "user_push_subscription"`); - await queryRunner.query( - `ALTER TABLE "temporary_user_push_subscription" RENAME TO "user_push_subscription"` - ); - await queryRunner.query( - `CREATE TABLE "temporary_user_push_subscription" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "endpoint" varchar NOT NULL, "p256dh" varchar NOT NULL, "auth" varchar NOT NULL, "userId" integer, "userAgent" varchar, "createdAt" datetime DEFAULT (datetime('now')), CONSTRAINT "UQ_f90ab5a4ed54905a4bb51a7148b" UNIQUE ("auth"), CONSTRAINT "FK_03f7958328e311761b0de675fbe" FOREIGN KEY ("userId") REFERENCES "user" ("id") ON DELETE CASCADE ON UPDATE NO ACTION)` - ); - await queryRunner.query( - `INSERT INTO "temporary_user_push_subscription"("id", "endpoint", "p256dh", "auth", "userId", "userAgent", "createdAt") SELECT "id", "endpoint", "p256dh", "auth", "userId", "userAgent", "createdAt" FROM "user_push_subscription"` - ); - await queryRunner.query(`DROP TABLE "user_push_subscription"`); - await queryRunner.query( - `ALTER TABLE "temporary_user_push_subscription" RENAME TO "user_push_subscription"` - ); - } - - public async down(queryRunner: QueryRunner): Promise { - await queryRunner.query( - `ALTER TABLE "user_push_subscription" RENAME TO "temporary_user_push_subscription"` - ); - await queryRunner.query( - `CREATE TABLE "user_push_subscription" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "endpoint" varchar NOT NULL, "p256dh" varchar NOT NULL, "auth" varchar NOT NULL, "userId" integer, "userAgent" varchar, "createdAt" datetime DEFAULT (datetime('now')), CONSTRAINT "UQ_f90ab5a4ed54905a4bb51a7148b" UNIQUE ("auth"), CONSTRAINT "FK_03f7958328e311761b0de675fbe" FOREIGN KEY ("userId") REFERENCES "user" ("id") ON DELETE CASCADE ON UPDATE NO ACTION)` - ); - await queryRunner.query( - `INSERT INTO "user_push_subscription"("id", "endpoint", "p256dh", "auth", "userId", "userAgent", "createdAt") SELECT "id", "endpoint", "p256dh", "auth", "userId", "userAgent", "createdAt" FROM "temporary_user_push_subscription"` - ); - await queryRunner.query(`DROP TABLE "temporary_user_push_subscription"`); - await queryRunner.query( - `ALTER TABLE "user_push_subscription" RENAME TO "temporary_user_push_subscription"` - ); - await queryRunner.query( - `CREATE TABLE "user_push_subscription" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "endpoint" varchar NOT NULL, "p256dh" varchar NOT NULL, "auth" varchar NOT NULL, "userId" integer, "userAgent" varchar, "createdAt" datetime DEFAULT (datetime('now')), CONSTRAINT "UQ_f90ab5a4ed54905a4bb51a7148b" UNIQUE ("auth"), CONSTRAINT "FK_03f7958328e311761b0de675fbe" FOREIGN KEY ("userId") REFERENCES "user" ("id") ON DELETE CASCADE ON UPDATE NO ACTION)` - ); - await queryRunner.query( - `INSERT INTO "user_push_subscription"("id", "endpoint", "p256dh", "auth", "userId", "userAgent", "createdAt") SELECT "id", "endpoint", "p256dh", "auth", "userId", "userAgent", "createdAt" FROM "temporary_user_push_subscription"` - ); - await queryRunner.query(`DROP TABLE "temporary_user_push_subscription"`); - } -} diff --git a/server/migration/sqlite/1745265825619-AddPlexProfilesSupport.ts b/server/migration/sqlite/1745265825619-AddPlexProfilesSupport.ts new file mode 100644 index 00000000..d2f23ea0 --- /dev/null +++ b/server/migration/sqlite/1745265825619-AddPlexProfilesSupport.ts @@ -0,0 +1,53 @@ +import type { MigrationInterface, QueryRunner } from 'typeorm'; + +export class AddPlexProfilesSupport1745265825619 implements MigrationInterface { + name = 'AddPlexProfilesSupport1745265825619'; + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "user_push_subscription" ADD "userAgent" character varying` + ); + await queryRunner.query( + `ALTER TABLE "user_push_subscription" ADD "createdAt" TIMESTAMP DEFAULT now()` + ); + await queryRunner.query( + `ALTER TABLE "user" ADD "plexProfileId" character varying` + ); + await queryRunner.query( + `ALTER TABLE "user" ADD "isPlexProfile" boolean NOT NULL DEFAULT false` + ); + await queryRunner.query(`ALTER TABLE "user" ADD "mainPlexUserId" integer`); + await queryRunner.query( + `ALTER TABLE "user" ADD "avatarETag" character varying` + ); + await queryRunner.query( + `ALTER TABLE "user" ADD "avatarVersion" character varying` + ); + await queryRunner.query( + `ALTER TABLE "blacklist" ADD "blacklistedTags" character varying` + ); + await queryRunner.query( + `ALTER TABLE "user_push_subscription" DROP CONSTRAINT "UQ_f90ab5a4ed54905a4bb51a7148b"` + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "user_push_subscription" ADD CONSTRAINT "UQ_f90ab5a4ed54905a4bb51a7148b" UNIQUE ("auth")` + ); + await queryRunner.query( + `ALTER TABLE "blacklist" DROP COLUMN "blacklistedTags"` + ); + await queryRunner.query(`ALTER TABLE "user" DROP COLUMN "avatarVersion"`); + await queryRunner.query(`ALTER TABLE "user" DROP COLUMN "avatarETag"`); + await queryRunner.query(`ALTER TABLE "user" DROP COLUMN "mainPlexUserId"`); + await queryRunner.query(`ALTER TABLE "user" DROP COLUMN "isPlexProfile"`); + await queryRunner.query(`ALTER TABLE "user" DROP COLUMN "plexProfileId"`); + await queryRunner.query( + `ALTER TABLE "user_push_subscription" DROP COLUMN "createdAt"` + ); + await queryRunner.query( + `ALTER TABLE "user_push_subscription" DROP COLUMN "userAgent"` + ); + } +}