mirror of
https://github.com/immich-app/immich.git
synced 2025-12-21 09:15:44 +03:00
chore: migrate database files (#8126)
This commit is contained in:
83
server/src/migrations/1705363967169-CreateAssetStackTable.ts
Normal file
83
server/src/migrations/1705363967169-CreateAssetStackTable.ts
Normal file
@@ -0,0 +1,83 @@
|
||||
import { MigrationInterface, QueryRunner } from 'typeorm';
|
||||
|
||||
export class CreateAssetStackTable1705197515600 implements MigrationInterface {
|
||||
name = 'CreateAssetStackTable1705197515600';
|
||||
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
// create table
|
||||
await queryRunner.query(
|
||||
`CREATE TABLE "asset_stack" (
|
||||
"id" uuid NOT NULL DEFAULT uuid_generate_v4(),
|
||||
"primaryAssetId" uuid NOT NULL,
|
||||
CONSTRAINT "REL_91704e101438fd0653f582426d" UNIQUE ("primaryAssetId"),
|
||||
CONSTRAINT "PK_74a27e7fcbd5852463d0af3034b" PRIMARY KEY ("id"))`,
|
||||
);
|
||||
|
||||
// create stacks
|
||||
await queryRunner.query(
|
||||
`INSERT INTO "asset_stack" ("primaryAssetId")
|
||||
SELECT DISTINCT("stackParentId" )
|
||||
FROM "assets"
|
||||
WHERE "stackParentId" IS NOT NULL;`,
|
||||
);
|
||||
|
||||
// add "stackId"
|
||||
await queryRunner.query(`ALTER TABLE "assets" ADD COLUMN "stackId" uuid`);
|
||||
|
||||
// set "stackId" for parents
|
||||
await queryRunner.query(
|
||||
`UPDATE "assets"
|
||||
SET "stackId" = "asset_stack"."id"
|
||||
FROM "asset_stack"
|
||||
WHERE "assets"."id" = "asset_stack"."primaryAssetId"`,
|
||||
);
|
||||
|
||||
// set "stackId" for children
|
||||
await queryRunner.query(
|
||||
`UPDATE "assets"
|
||||
SET "stackId" = "asset_stack"."id"
|
||||
FROM "asset_stack"
|
||||
WHERE "assets"."stackParentId" = "asset_stack"."primaryAssetId"`,
|
||||
);
|
||||
|
||||
// update constraints
|
||||
await queryRunner.query(`DROP INDEX "public"."IDX_b463c8edb01364bf2beba08ef1"`);
|
||||
await queryRunner.query(`ALTER TABLE "assets" DROP CONSTRAINT "FK_b463c8edb01364bf2beba08ef19"`);
|
||||
await queryRunner.query(
|
||||
`ALTER TABLE "assets" ADD CONSTRAINT "FK_f15d48fa3ea5e4bda05ca8ab207" FOREIGN KEY ("stackId") REFERENCES "asset_stack"("id") ON DELETE SET NULL ON UPDATE CASCADE`,
|
||||
);
|
||||
await queryRunner.query(
|
||||
`ALTER TABLE "asset_stack" ADD CONSTRAINT "FK_91704e101438fd0653f582426dc" FOREIGN KEY ("primaryAssetId") REFERENCES "assets"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`,
|
||||
);
|
||||
|
||||
// drop "stackParentId"
|
||||
await queryRunner.query(`ALTER TABLE "assets" DROP COLUMN "stackParentId"`);
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
// add "stackParentId"
|
||||
await queryRunner.query(`ALTER TABLE "assets" ADD COLUMN "stackParentId" uuid`);
|
||||
|
||||
// set "stackParentId" for parents
|
||||
await queryRunner.query(
|
||||
`UPDATE "assets"
|
||||
SET "stackParentId" = "asset_stack"."primaryAssetId"
|
||||
FROM "asset_stack"
|
||||
WHERE "assets"."stackId" = "asset_stack"."id" and "assets"."id" != "asset_stack"."primaryAssetId"`,
|
||||
);
|
||||
|
||||
// update constraints
|
||||
await queryRunner.query(
|
||||
`ALTER TABLE "assets" ADD CONSTRAINT "FK_b463c8edb01364bf2beba08ef19" FOREIGN KEY ("stackParentId") REFERENCES "assets"("id") ON DELETE SET NULL ON UPDATE CASCADE`,
|
||||
);
|
||||
await queryRunner.query(`CREATE INDEX "IDX_b463c8edb01364bf2beba08ef1" ON "assets" ("stackParentId") `);
|
||||
await queryRunner.query(`ALTER TABLE "asset_stack" DROP CONSTRAINT "FK_91704e101438fd0653f582426dc"`);
|
||||
await queryRunner.query(`ALTER TABLE "assets" DROP CONSTRAINT "FK_f15d48fa3ea5e4bda05ca8ab207"`);
|
||||
|
||||
// drop table
|
||||
await queryRunner.query(`DROP TABLE "asset_stack"`);
|
||||
|
||||
// drop "stackId"
|
||||
await queryRunner.query(`ALTER TABLE "assets" DROP COLUMN "stackId"`);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user