import { MigrationInterface, QueryRunner, TableColumn, TableForeignKey, TableIndex } from "typeorm"; import { communication } from "../entity/club/member/communication"; import { member } from "../entity/club/member/member"; export class MoveSendNewsletterFlag1737816852011 implements MigrationInterface { name = "MoveSendNewsletterFlag1737816852011"; public async up(queryRunner: QueryRunner): Promise { const table = await queryRunner.getTable("member"); const foreignKey = table.foreignKeys.find((fk) => fk.columnNames.indexOf("sendNewsletterId") !== -1); await queryRunner.dropForeignKey("member", foreignKey); await queryRunner.addColumn( "communication", new TableColumn({ name: "isSendNewsletter", type: "tinyint", isNullable: false, default: 0 }) ); // ! has to be sql. Else no data is returned. const member_newsletter_send = await queryRunner.query("SELECT sendNewsletterId, id FROM `member` `member`"); for (let assigned of member_newsletter_send.map((mns: any) => ({ id: mns.id, sendNewsletterId: mns.sendNewsletterId, })) as Array<{ id: number; sendNewsletterId: number }>) { await queryRunner.manager .getRepository(communication) .createQueryBuilder("communication") .update({ isSendNewsletter: true }) .where({ memberId: assigned.id, id: assigned.sendNewsletterId }) .execute(); } await queryRunner.dropColumn("member", "sendNewsletterId"); } public async down(queryRunner: QueryRunner): Promise { await queryRunner.addColumn( "member", new TableColumn({ name: "sendNewsletterId", type: "int", isNullable: true, isUnique: true, default: null }) ); const member_newsletter_send = await queryRunner.manager .getRepository(communication) .createQueryBuilder("communication") .where("communication.isSendNewsletter = :isSendNewsletter", { isSendNewsletter: true }) .getMany(); for (let assigned of member_newsletter_send.map((mns: any) => ({ id: mns.id, memberId: mns.memberId, })) as Array<{ id: number; memberId: number }>) { await queryRunner.query("UPDATE `member` SET sendNewsletterId = ? WHERE id = ?", [ assigned.id, assigned.memberId, ]); } await queryRunner.createForeignKey( "member", new TableForeignKey({ columnNames: ["sendNewsletterId"], referencedColumnNames: ["id"], referencedTableName: "communication", onDelete: "SET NULL", onUpdate: "RESTRICT", }) ); await queryRunner.dropColumn("communication", "isSendNewsletter"); } }