import { MigrationInterface, QueryRunner } from 'typeorm'

export class AddTableCombinationEntity1719575748222 implements MigrationInterface {
	name = 'AddTableCombinationEntity1719575748222'

	public async up(queryRunner: QueryRunner): Promise<void> {
		await queryRunner.query(
			`CREATE TABLE "table_combination" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "createdAt" TIMESTAMP NOT NULL DEFAULT now(), "tenantId" uuid, "createdBy" uuid, "lastUpdatedAt" TIMESTAMP NOT NULL DEFAULT now(), "lastUpdatedBy" uuid, "deletedAt" TIMESTAMP, "deletedBy" uuid, "name" character varying(30) NOT NULL, CONSTRAINT "PK_a6a3cb89f1a6cbce13b585c897d" PRIMARY KEY ("id"))`,
		)
		await queryRunner.query(
			`CREATE TABLE "table_combination_tables" ("tableCombinationId" uuid NOT NULL, "tableId" uuid NOT NULL, CONSTRAINT "PK_a827581f27068ec3866c1d002f0" PRIMARY KEY ("tableCombinationId", "tableId"))`,
		)
		await queryRunner.query(
			`CREATE INDEX "IDX_8985e4c25a6c23f3fcb20ad325" ON "table_combination_tables" ("tableCombinationId") `,
		)
		await queryRunner.query(`CREATE INDEX "IDX_66610fbc27078c5ad1053215c8" ON "table_combination_tables" ("tableId") `)
		await queryRunner.query(
			`ALTER TABLE "table_combination_tables" ADD CONSTRAINT "FK_8985e4c25a6c23f3fcb20ad3250" FOREIGN KEY ("tableCombinationId") REFERENCES "table_combination"("id") ON DELETE CASCADE ON UPDATE CASCADE`,
		)
		await queryRunner.query(
			`ALTER TABLE "table_combination_tables" ADD CONSTRAINT "FK_66610fbc27078c5ad1053215c8e" FOREIGN KEY ("tableId") REFERENCES "table"("id") ON DELETE CASCADE ON UPDATE CASCADE`,
		)
	}

	public async down(queryRunner: QueryRunner): Promise<void> {
		await queryRunner.query(`ALTER TABLE "table_combination_tables" DROP CONSTRAINT "FK_66610fbc27078c5ad1053215c8e"`)
		await queryRunner.query(`ALTER TABLE "table_combination_tables" DROP CONSTRAINT "FK_8985e4c25a6c23f3fcb20ad3250"`)
		await queryRunner.query(`DROP INDEX "public"."IDX_66610fbc27078c5ad1053215c8"`)
		await queryRunner.query(`DROP INDEX "public"."IDX_8985e4c25a6c23f3fcb20ad325"`)
		await queryRunner.query(`DROP TABLE "table_combination_tables"`)
		await queryRunner.query(`DROP TABLE "table_combination"`)
	}
}
