94 lines
2.9 KiB
TypeScript
94 lines
2.9 KiB
TypeScript
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<void> {
|
|
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<void> {
|
|
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",
|
|
})
|
|
);
|
|
}
|
|
}
|