From 693cdde3273e0e8ffe1a04fd31fd54d982a3b1c4 Mon Sep 17 00:00:00 2001 From: Hazelnoot Date: Fri, 30 May 2025 15:37:27 -0400 Subject: [PATCH] upsert reactions to avoid error+retry overhead --- packages/backend/src/core/ReactionService.ts | 25 ++++---------------- 1 file changed, 4 insertions(+), 21 deletions(-) diff --git a/packages/backend/src/core/ReactionService.ts b/packages/backend/src/core/ReactionService.ts index f05ee2ee73..e57a8d942d 100644 --- a/packages/backend/src/core/ReactionService.ts +++ b/packages/backend/src/core/ReactionService.ts @@ -176,27 +176,10 @@ export class ReactionService { reaction, }; - try { - await this.noteReactionsRepository.insert(record); - } catch (e) { - if (isDuplicateKeyValueError(e)) { - const exists = await this.noteReactionsRepository.findOneByOrFail({ - noteId: note.id, - userId: user.id, - }); - - if (exists.reaction !== reaction) { - // 別のリアクションがすでにされていたら置き換える - await this.delete(user, note); - await this.noteReactionsRepository.insert(record); - } else { - // 同じリアクションがすでにされていたらエラー - throw new IdentifiableError('51c42bb4-931a-456b-bff7-e5a8a70dd298'); - } - } else { - throw e; - } - } + await this.noteReactionsRepository.upsert(record, { + skipUpdateIfNoValuesChanged: true, + conflictPaths: ['noteId', 'userId'], + }); // Increment reactions count if (this.meta.enableReactionsBuffering) {