129 lines
4.7 KiB
TypeScript
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");
|
|
}
|
|
}
|