diff --git a/server/src/entities/album.entity.ts b/server/src/entities/album.entity.ts index ee2e550cd..5b14472e4 100644 --- a/server/src/entities/album.entity.ts +++ b/server/src/entities/album.entity.ts @@ -71,19 +71,35 @@ export class AlbumEntity { order!: AssetOrder; @ManyToMany(() => AlbumEntity, (album) => album.parentAlbums) - @JoinTable({ name: 'sub_albums', joinColumn: { name: 'childId' }, inverseJoinColumn: { name: 'parentId' } }) + @JoinTable({ + name: 'sub_albums', + joinColumn: { name: 'childId' }, + inverseJoinColumn: { name: 'parentId' }, + synchronize: false, + }) parentAlbums!: AlbumEntity[]; @ManyToMany(() => AlbumEntity, (album) => album.childAlbums) - @JoinTable({ name: 'sub_albums', joinColumn: { name: 'parentId' }, inverseJoinColumn: { name: 'childId' } }) + @JoinTable({ + name: 'sub_albums', + joinColumn: { name: 'parentId' }, + inverseJoinColumn: { name: 'childId' }, + synchronize: false, + }) childAlbums!: AlbumEntity[]; } -@Entity('sub_albums') +@Entity('sub_albums', { synchronize: false }) export class SubAlbumEntity { @PrimaryColumn() parentId!: string; @PrimaryColumn() childId!: string; + + @ManyToOne(() => AlbumEntity, (album) => album.childAlbums, { onDelete: 'CASCADE' }) + parent!: AlbumEntity; + + @ManyToOne(() => AlbumEntity, (album) => album.parentAlbums, { onDelete: 'CASCADE' }) + child!: AlbumEntity; } diff --git a/server/src/migrations/1712100663844-AddNestedAlbumRelationship.ts b/server/src/migrations/1712100663844-AddNestedAlbumRelationship.ts deleted file mode 100644 index 76f5b2f04..000000000 --- a/server/src/migrations/1712100663844-AddNestedAlbumRelationship.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { MigrationInterface, QueryRunner } from 'typeorm'; - -export class AddNestedAlbumRelationship1712100663844 implements MigrationInterface { - name = 'AddNestedAlbumRelationship1712100663844'; - - public async up(queryRunner: QueryRunner): Promise { - await queryRunner.query( - `CREATE TABLE "sub_albums" ("parentId" character varying NOT NULL, "childId" character varying NOT NULL, CONSTRAINT "PK_bd5df025a7a641b10bce219dc8d" PRIMARY KEY ("parentId", "childId"))`, - ); - await queryRunner.query(`ALTER TABLE "sub_albums" DROP CONSTRAINT "PK_bd5df025a7a641b10bce219dc8d"`); - await queryRunner.query( - `ALTER TABLE "sub_albums" ADD CONSTRAINT "PK_6aa094f6f0d888c90c418a14d70" PRIMARY KEY ("parentId")`, - ); - await queryRunner.query(`ALTER TABLE "sub_albums" DROP COLUMN "childId"`); - await queryRunner.query(`ALTER TABLE "sub_albums" ADD "childId" uuid NOT NULL`); - await queryRunner.query(`ALTER TABLE "sub_albums" DROP CONSTRAINT "PK_6aa094f6f0d888c90c418a14d70"`); - await queryRunner.query( - `ALTER TABLE "sub_albums" ADD CONSTRAINT "PK_bd5df025a7a641b10bce219dc8d" PRIMARY KEY ("parentId", "childId")`, - ); - await queryRunner.query(`ALTER TABLE "sub_albums" DROP CONSTRAINT "PK_bd5df025a7a641b10bce219dc8d"`); - await queryRunner.query( - `ALTER TABLE "sub_albums" ADD CONSTRAINT "PK_b0b854d4c62ed6a4a46cff3b6b9" PRIMARY KEY ("childId")`, - ); - await queryRunner.query(`ALTER TABLE "sub_albums" DROP COLUMN "parentId"`); - await queryRunner.query(`ALTER TABLE "sub_albums" ADD "parentId" uuid NOT NULL`); - await queryRunner.query(`ALTER TABLE "sub_albums" DROP CONSTRAINT "PK_b0b854d4c62ed6a4a46cff3b6b9"`); - await queryRunner.query( - `ALTER TABLE "sub_albums" ADD CONSTRAINT "PK_bd5df025a7a641b10bce219dc8d" PRIMARY KEY ("childId", "parentId")`, - ); - await queryRunner.query(`CREATE INDEX "IDX_b0b854d4c62ed6a4a46cff3b6b" ON "sub_albums" ("childId") `); - await queryRunner.query(`CREATE INDEX "IDX_6aa094f6f0d888c90c418a14d7" ON "sub_albums" ("parentId") `); - await queryRunner.query( - `ALTER TABLE "sub_albums" ADD CONSTRAINT "FK_b0b854d4c62ed6a4a46cff3b6b9" FOREIGN KEY ("childId") REFERENCES "albums"("id") ON DELETE CASCADE ON UPDATE CASCADE`, - ); - await queryRunner.query( - `ALTER TABLE "sub_albums" ADD CONSTRAINT "FK_6aa094f6f0d888c90c418a14d70" FOREIGN KEY ("parentId") REFERENCES "albums"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`, - ); - } - - public async down(queryRunner: QueryRunner): Promise { - await queryRunner.query(`ALTER TABLE "sub_albums" DROP CONSTRAINT "FK_6aa094f6f0d888c90c418a14d70"`); - await queryRunner.query(`ALTER TABLE "sub_albums" DROP CONSTRAINT "FK_b0b854d4c62ed6a4a46cff3b6b9"`); - await queryRunner.query(`DROP INDEX "public"."IDX_6aa094f6f0d888c90c418a14d7"`); - await queryRunner.query(`DROP INDEX "public"."IDX_b0b854d4c62ed6a4a46cff3b6b"`); - await queryRunner.query(`ALTER TABLE "sub_albums" DROP CONSTRAINT "PK_bd5df025a7a641b10bce219dc8d"`); - await queryRunner.query( - `ALTER TABLE "sub_albums" ADD CONSTRAINT "PK_b0b854d4c62ed6a4a46cff3b6b9" PRIMARY KEY ("childId")`, - ); - await queryRunner.query(`ALTER TABLE "sub_albums" DROP COLUMN "parentId"`); - await queryRunner.query(`ALTER TABLE "sub_albums" ADD "parentId" character varying NOT NULL`); - await queryRunner.query(`ALTER TABLE "sub_albums" DROP CONSTRAINT "PK_b0b854d4c62ed6a4a46cff3b6b9"`); - await queryRunner.query( - `ALTER TABLE "sub_albums" ADD CONSTRAINT "PK_bd5df025a7a641b10bce219dc8d" PRIMARY KEY ("parentId", "childId")`, - ); - await queryRunner.query(`ALTER TABLE "sub_albums" DROP CONSTRAINT "PK_bd5df025a7a641b10bce219dc8d"`); - await queryRunner.query( - `ALTER TABLE "sub_albums" ADD CONSTRAINT "PK_6aa094f6f0d888c90c418a14d70" PRIMARY KEY ("parentId")`, - ); - await queryRunner.query(`ALTER TABLE "sub_albums" DROP COLUMN "childId"`); - await queryRunner.query(`ALTER TABLE "sub_albums" ADD "childId" character varying NOT NULL`); - await queryRunner.query(`ALTER TABLE "sub_albums" DROP CONSTRAINT "PK_6aa094f6f0d888c90c418a14d70"`); - await queryRunner.query( - `ALTER TABLE "sub_albums" ADD CONSTRAINT "PK_bd5df025a7a641b10bce219dc8d" PRIMARY KEY ("parentId", "childId")`, - ); - await queryRunner.query(`DROP TABLE "sub_albums"`); - } -} diff --git a/server/src/migrations/1712118617647-AddNestedAlbumRelationship.ts b/server/src/migrations/1712118617647-AddNestedAlbumRelationship.ts new file mode 100644 index 000000000..d96936f24 --- /dev/null +++ b/server/src/migrations/1712118617647-AddNestedAlbumRelationship.ts @@ -0,0 +1,24 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class AddNestedAlbumRelationship1712118617647 implements MigrationInterface { + name = 'AddNestedAlbumRelationship1712118617647' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "sub_albums" DROP CONSTRAINT "FK_b0b854d4c62ed6a4a46cff3b6b9"`); + await queryRunner.query(`ALTER TABLE "sub_albums" DROP CONSTRAINT "FK_6aa094f6f0d888c90c418a14d70"`); + await queryRunner.query(`CREATE INDEX "IDX_b0b854d4c62ed6a4a46cff3b6b" ON "sub_albums" ("childId") `); + await queryRunner.query(`CREATE INDEX "IDX_6aa094f6f0d888c90c418a14d7" ON "sub_albums" ("parentId") `); + await queryRunner.query(`ALTER TABLE "sub_albums" ADD CONSTRAINT "FK_6aa094f6f0d888c90c418a14d70" FOREIGN KEY ("parentId") REFERENCES "albums"("id") ON DELETE CASCADE ON UPDATE NO ACTION`); + await queryRunner.query(`ALTER TABLE "sub_albums" ADD CONSTRAINT "FK_b0b854d4c62ed6a4a46cff3b6b9" FOREIGN KEY ("childId") REFERENCES "albums"("id") ON DELETE CASCADE ON UPDATE NO ACTION`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "sub_albums" DROP CONSTRAINT "FK_b0b854d4c62ed6a4a46cff3b6b9"`); + await queryRunner.query(`ALTER TABLE "sub_albums" DROP CONSTRAINT "FK_6aa094f6f0d888c90c418a14d70"`); + await queryRunner.query(`DROP INDEX "public"."IDX_6aa094f6f0d888c90c418a14d7"`); + await queryRunner.query(`DROP INDEX "public"."IDX_b0b854d4c62ed6a4a46cff3b6b"`); + await queryRunner.query(`ALTER TABLE "sub_albums" ADD CONSTRAINT "FK_6aa094f6f0d888c90c418a14d70" FOREIGN KEY ("parentId") REFERENCES "albums"("id") ON DELETE CASCADE ON UPDATE NO ACTION`); + await queryRunner.query(`ALTER TABLE "sub_albums" ADD CONSTRAINT "FK_b0b854d4c62ed6a4a46cff3b6b9" FOREIGN KEY ("childId") REFERENCES "albums"("id") ON DELETE CASCADE ON UPDATE NO ACTION`); + } + +}