ff-admin-server/src/migrations/1735118780511-newsletter.ts

129 lines
4.7 KiB
TypeScript

import { MigrationInterface, QueryRunner, Table, TableForeignKey } from "typeorm";
import { DB_TYPE } from "../env.defaults";
export class Newsletter1735118780511 implements MigrationInterface {
name = "Newsletter1735118780511";
public async up(queryRunner: QueryRunner): Promise<void> {
const variableType_int = DB_TYPE == "mysql" ? "int" : "integer";
await queryRunner.createTable(
new Table({
name: "newsletter_dates",
columns: [
{ name: "newsletterId", type: variableType_int, isPrimary: true },
{ name: "calendarId", type: "varchar", length: "255", isPrimary: true },
{ name: "diffTitle", type: "varchar", length: "255", isNullable: true },
{ name: "diffDescription", type: "text", isNullable: true },
],
}),
true
);
await queryRunner.createTable(
new Table({
name: "newsletter_recipients",
columns: [
{ name: "newsletterId", type: variableType_int, isPrimary: true },
{ name: "memberId", type: variableType_int, isPrimary: true },
{ name: "addedManually", type: "tinyint", default: "0" },
],
}),
true
);
await queryRunner.createTable(
new Table({
name: "newsletter",
columns: [
{ name: "id", type: variableType_int, isPrimary: true, isGenerated: true, generationStrategy: "increment" },
{ name: "title", type: "varchar", length: "255" },
{ name: "description", type: "varchar", length: "255", default: "''" },
{ name: "newsletterTitle", type: "varchar", length: "255", default: "''" },
{ name: "newsletterText", type: "text", default: "''" },
{ name: "newsletterSignatur", type: "varchar", length: "255", default: "''" },
{ name: "isSent", type: "tinyint", default: "0" },
{ name: "recipientsByQueryId", type: variableType_int, isNullable: true },
],
}),
true
);
await queryRunner.createForeignKey(
"newsletter_dates",
new TableForeignKey({
columnNames: ["newsletterId"],
referencedColumnNames: ["id"],
referencedTableName: "newsletter",
onDelete: "CASCADE",
onUpdate: "RESTRICT",
})
);
await queryRunner.createForeignKey(
"newsletter_dates",
new TableForeignKey({
columnNames: ["calendarId"],
referencedColumnNames: ["id"],
referencedTableName: "calendar",
onDelete: "RESTRICT",
onUpdate: "RESTRICT",
})
);
await queryRunner.createForeignKey(
"newsletter_recipients",
new TableForeignKey({
columnNames: ["newsletterId"],
referencedColumnNames: ["id"],
referencedTableName: "newsletter",
onDelete: "CASCADE",
onUpdate: "RESTRICT",
})
);
await queryRunner.createForeignKey(
"newsletter_recipients",
new TableForeignKey({
columnNames: ["memberId"],
referencedColumnNames: ["id"],
referencedTableName: "member",
onDelete: "CASCADE",
onUpdate: "RESTRICT",
})
);
await queryRunner.createForeignKey(
"newsletter",
new TableForeignKey({
columnNames: ["recipientsByQueryId"],
referencedColumnNames: ["id"],
referencedTableName: "query",
onDelete: "CASCADE",
onUpdate: "RESTRICT",
})
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
const tableN = await queryRunner.getTable("newsletter");
const tableNR = await queryRunner.getTable("newsletter_recipients");
const tableND = await queryRunner.getTable("newsletter_dates");
const foreignKeyN = tableN.foreignKeys.find((fk) => fk.columnNames.indexOf("recipientsByQueryId") !== -1);
const foreignKeyNR = tableNR.foreignKeys.find((fk) => fk.columnNames.indexOf("newsletterId") !== -1);
const foreignKeyNR2 = tableNR.foreignKeys.find((fk) => fk.columnNames.indexOf("memberId") !== -1);
const foreignKeyND1 = tableND.foreignKeys.find((fk) => fk.columnNames.indexOf("newsletterId") !== -1);
const foreignKeyND2 = tableND.foreignKeys.find((fk) => fk.columnNames.indexOf("calendarId") !== -1);
await queryRunner.dropForeignKey("newsletter", foreignKeyN);
await queryRunner.dropForeignKey("newsletter_recipients", foreignKeyNR);
await queryRunner.dropForeignKey("newsletter_recipients", foreignKeyNR2);
await queryRunner.dropForeignKey("newsletter_dates", foreignKeyND1);
await queryRunner.dropForeignKey("newsletter_dates", foreignKeyND2);
await queryRunner.dropTable("newsletter");
await queryRunner.dropTable("newsletter_recipients");
await queryRunner.dropTable("newsletter_dates");
}
}