import { MigrationInterface, QueryRunner, TableColumn, TableForeignKey } from "typeorm"; import { getTypeByORM, isIncrementPrimary, isUUIDPrimary } from "./ormHelper"; import { query } from "../entity/configuration/query"; export class QueryToUUID1742922178643 implements MigrationInterface { name = "QueryToUUID1742922178643"; public async up(queryRunner: QueryRunner): Promise { const table = await queryRunner.getTable("newsletter"); const foreignKey = table.foreignKeys.find((fk) => fk.columnNames.indexOf("recipientsByQueryId") !== -1); await queryRunner.dropForeignKey("newsletter", foreignKey); const entries = await queryRunner.manager.getRepository(query).find({ select: { title: true, query: true } }); await queryRunner.clearTable("query"); await queryRunner.dropColumn("newsletter", "recipientsByQueryId"); await queryRunner.dropColumn("query", "id"); await queryRunner.addColumn( "query", new TableColumn({ name: "id", ...getTypeByORM("uuid"), ...isUUIDPrimary, }) ); await queryRunner.addColumn( "newsletter", new TableColumn({ name: "recipientsByQueryId", ...getTypeByORM("uuid", true), }) ); await queryRunner.manager.createQueryBuilder().insert().into("query").values(entries).execute(); await queryRunner.createForeignKey( "newsletter", new TableForeignKey({ columnNames: ["recipientsByQueryId"], referencedColumnNames: ["id"], referencedTableName: "query", onDelete: "CASCADE", onUpdate: "RESTRICT", }) ); } public async down(queryRunner: QueryRunner): Promise { const table = await queryRunner.getTable("newsletter"); const foreignKey = table.foreignKeys.find((fk) => fk.columnNames.indexOf("recipientsByQueryId") !== -1); await queryRunner.dropForeignKey("newsletter", foreignKey); const entries = await queryRunner.manager.getRepository(query).find({ select: { title: true, query: true } }); await queryRunner.clearTable("query"); await queryRunner.dropColumn("newsletter", "recipientsByQueryId"); await queryRunner.dropColumn("query", "id"); await queryRunner.addColumn( "query", new TableColumn({ name: "id", ...getTypeByORM("int"), ...isIncrementPrimary, }) ); await queryRunner.addColumn( "newsletter", new TableColumn({ name: "recipientsByQueryId", ...getTypeByORM("int", true), }) ); await queryRunner.manager .createQueryBuilder() .insert() .into("query") .values(entries.map((e, i) => ({ ...e, id: i + 1 }))) .execute(); await queryRunner.createForeignKey( "newsletter", new TableForeignKey({ columnNames: ["recipientsByQueryId"], referencedColumnNames: ["id"], referencedTableName: "query", onDelete: "CASCADE", onUpdate: "RESTRICT", }) ); } }