From 399c4d84a1f66fcf7d79bbd06fe5ba83121a8b6b Mon Sep 17 00:00:00 2001 From: Julian Krauser Date: Mon, 14 Jul 2025 16:12:12 +0200 Subject: [PATCH] change: relation of newsletter receivers to query --- src/data-source.ts | 7 ++- src/entity/club/newsletter/newsletter.ts | 2 +- ...502069178-updateNewsletterQueryRelation.ts | 44 +++++++++++++++++++ 3 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 src/migrations/1752502069178-updateNewsletterQueryRelation.ts diff --git a/src/data-source.ts b/src/data-source.ts index ed56dad..74399a3 100644 --- a/src/data-source.ts +++ b/src/data-source.ts @@ -50,6 +50,7 @@ import { memberEducations } from "./entity/club/member/memberEducations"; import { BackupAndResetDatabase1749296262915 } from "./migrations/1749296262915-BackupAndResetDatabase"; import { CreateSchema1749296280721 } from "./migrations/1749296280721-CreateSchema"; +import { UpdateNewsletterQueryRelation1752502069178 } from "./migrations/1752502069178-updateNewsletterQueryRelation"; configCheck(); @@ -108,7 +109,11 @@ const dataSource = new DataSource({ webapiPermission, setting, ], - migrations: [BackupAndResetDatabase1749296262915, CreateSchema1749296280721], + migrations: [ + BackupAndResetDatabase1749296262915, + CreateSchema1749296280721, + UpdateNewsletterQueryRelation1752502069178, + ], migrationsRun: true, migrationsTransactionMode: "each", subscribers: [], diff --git a/src/entity/club/newsletter/newsletter.ts b/src/entity/club/newsletter/newsletter.ts index ead7052..c17aa98 100644 --- a/src/entity/club/newsletter/newsletter.ts +++ b/src/entity/club/newsletter/newsletter.ts @@ -40,7 +40,7 @@ export class newsletter { @ManyToOne(() => query, { nullable: true, - onDelete: "CASCADE", + onDelete: "SET NULL", onUpdate: "RESTRICT", cascade: ["insert"], }) diff --git a/src/migrations/1752502069178-updateNewsletterQueryRelation.ts b/src/migrations/1752502069178-updateNewsletterQueryRelation.ts new file mode 100644 index 0000000..759820c --- /dev/null +++ b/src/migrations/1752502069178-updateNewsletterQueryRelation.ts @@ -0,0 +1,44 @@ +import { MigrationInterface, QueryRunner, TableForeignKey } from "typeorm"; +import { newsletter_table } from "./baseSchemaTables/newsletter"; + +export class UpdateNewsletterQueryRelation1752502069178 implements MigrationInterface { + name = "UpdateNewsletterQueryRelation1752502069178"; + + public async up(queryRunner: QueryRunner): Promise { + const table = await queryRunner.getTable("newsletter"); + const foreignKey = table?.foreignKeys.find((fk) => fk.columnNames.includes("recipientsByQueryId")); + if (foreignKey) { + await queryRunner.dropForeignKey("newsletter", foreignKey); + } + + await queryRunner.createForeignKey( + newsletter_table, + new TableForeignKey({ + columnNames: ["recipientsByQueryId"], + referencedColumnNames: ["id"], + referencedTableName: "query", + onDelete: "SET NULL", + onUpdate: "RESTRICT", + }) + ); + } + + public async down(queryRunner: QueryRunner): Promise { + const table = await queryRunner.getTable("newsletter"); + const foreignKey = table?.foreignKeys.find((fk) => fk.columnNames.includes("recipientsByQueryId")); + if (foreignKey) { + await queryRunner.dropForeignKey("newsletter", foreignKey); + } + + await queryRunner.createForeignKey( + newsletter_table, + new TableForeignKey({ + columnNames: ["recipientsByQueryId"], + referencedColumnNames: ["id"], + referencedTableName: "query", + onDelete: "CASCADE", + onUpdate: "RESTRICT", + }) + ); + } +}