diff --git a/package-lock.json b/package-lock.json index e0c92d4..52c242e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ff-admin-server", - "version": "1.7.2", + "version": "1.7.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ff-admin-server", - "version": "1.7.2", + "version": "1.7.3", "license": "AGPL-3.0-only", "dependencies": { "cors": "^2.8.5", diff --git a/package.json b/package.json index 695a152..2ae467d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ff-admin-server", - "version": "1.7.2", + "version": "1.7.3", "description": "Feuerwehr/Verein Mitgliederverwaltung Server", "main": "dist/index.js", "scripts": { diff --git a/src/data-source.ts b/src/data-source.ts index 67e15d5..b54707a 100644 --- a/src/data-source.ts +++ b/src/data-source.ts @@ -64,6 +64,7 @@ import { maintenance } from "./entity/unit/maintenance"; import { BackupAndResetDatabase1749296262915 } from "./migrations/1749296262915-BackupAndResetDatabase"; import { CreateSchema1749296280721 } from "./migrations/1749296280721-CreateSchema"; +import { UpdateNewsletterQueryRelation1752502069178 } from "./migrations/1752502069178-updateNewsletterQueryRelation"; import { UnitBase1749361405703 } from "./migrations/1749361405703-UnitBase"; configCheck(); @@ -136,7 +137,12 @@ const dataSource = new DataSource({ inspection, inspectionPointResult, ], - migrations: [BackupAndResetDatabase1749296262915, CreateSchema1749296280721, UnitBase1749361405703], + migrations: [ + BackupAndResetDatabase1749296262915, + CreateSchema1749296280721, + UpdateNewsletterQueryRelation1752502069178, + UnitBase1749361405703, + ], 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/helpers/dynamicQueryBuilder.ts b/src/helpers/dynamicQueryBuilder.ts index 25d7554..5548ffd 100644 --- a/src/helpers/dynamicQueryBuilder.ts +++ b/src/helpers/dynamicQueryBuilder.ts @@ -65,7 +65,7 @@ export default abstract class DynamicQueryBuilder { count?: number; noLimit?: boolean; }): SelectQueryBuilder { - let affix = queryObj.id.replaceAll("-", "") ?? StringHelper.random(10); + let affix = queryObj.id?.replaceAll("-", "") ?? StringHelper.random(10); let query = dataSource.getRepository(queryObj.table).createQueryBuilder(`${affix}_${queryObj.table}`); this.buildDynamicQuery(query, queryObj, affix); @@ -118,7 +118,7 @@ export default abstract class DynamicQueryBuilder { if (queryObject.join) { for (const join of queryObject.join) { - let subaffix = join.id.replaceAll("-", "") ?? StringHelper.random(10); + let subaffix = join.id?.replaceAll("-", "") ?? StringHelper.random(10); if (join.type == undefined) join.type = "defined"; if (join.type == "defined") { query.innerJoin(`${alias}.${join.foreignColumn}`, `${subaffix}_${join.table}`); 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", + }) + ); + } +}