From 8736343c4d3fa7f643fd719753d1f28ae8b80716 Mon Sep 17 00:00:00 2001 From: CyberL1 Date: Mon, 20 Oct 2025 14:08:20 +0200 Subject: [PATCH] fix: set `message_reference_id` to null if original message is deleted --- src/util/entities/Message.ts | 3 +-- .../1760961911873-message_reference_fix.ts | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 src/util/migration/postgres/1760961911873-message_reference_fix.ts diff --git a/src/util/entities/Message.ts b/src/util/entities/Message.ts index cdda4450..8fa13ed6 100644 --- a/src/util/entities/Message.ts +++ b/src/util/entities/Message.ts @@ -169,7 +169,7 @@ export class Message extends BaseClass { }; @JoinColumn({ name: "message_reference_id" }) - @ManyToOne(() => Message) + @ManyToOne(() => Message, { onDelete: "SET NULL" }) referenced_message?: Message | null; @Column({ type: "simple-json", nullable: true }) @@ -272,7 +272,6 @@ export class Message extends BaseClass { if (!opts.member_id) opts.member_id = message.author_id; if (!opts.member) opts.member = await Member.findOneOrFail({ where: { id: opts.member_id! } }); - if (!opts.guild) { if (opts.guild_id) opts.guild = await Guild.findOneOrFail({ where: { id: opts.guild_id! } }); else if (opts.channel?.guild?.id) opts.guild = opts.channel.guild; diff --git a/src/util/migration/postgres/1760961911873-message_reference_fix.ts b/src/util/migration/postgres/1760961911873-message_reference_fix.ts new file mode 100644 index 00000000..1f61ab17 --- /dev/null +++ b/src/util/migration/postgres/1760961911873-message_reference_fix.ts @@ -0,0 +1,19 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class MessageReferenceFix1760961911873 implements MigrationInterface { + name = "MessageReferenceFix1760961911873"; + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "messages" DROP CONSTRAINT "FK_61a92bb65b302a76d9c1fcd3174"`); + await queryRunner.query( + `ALTER TABLE "messages" ADD CONSTRAINT "FK_61a92bb65b302a76d9c1fcd3174" FOREIGN KEY ("message_reference_id") REFERENCES "messages"("id") ON DELETE SET NULL ON UPDATE NO ACTION`, + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "messages" DROP CONSTRAINT "FK_61a92bb65b302a76d9c1fcd3174"`); + await queryRunner.query( + `ALTER TABLE "messages" ADD CONSTRAINT "FK_61a92bb65b302a76d9c1fcd3174" FOREIGN KEY ("message_reference_id") REFERENCES "messages"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`, + ); + } +}