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 { 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 { 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"); } }