72 lines
2.6 KiB
TypeScript
72 lines
2.6 KiB
TypeScript
|
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<void> {
|
||
|
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<void> {
|
||
|
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");
|
||
|
}
|
||
|
}
|