From df9e1924cd5530d8c5c612b4d943c0e33da59f86 Mon Sep 17 00:00:00 2001 From: didinele Date: Tue, 10 Oct 2023 19:59:21 +0300 Subject: [PATCH] fix: proper transaction handling --- packages/bot/src/commands/ask.ts | 17 +++++++++++++++-- packages/bot/src/components/guest-approve.ts | 9 +++++++++ packages/bot/src/components/mod-approve.ts | 9 +++++++++ packages/bot/src/components/submit-question.ts | 17 +++++++++++++++-- packages/bot/src/struct/AmaManager.ts | 15 +++------------ 5 files changed, 51 insertions(+), 16 deletions(-) diff --git a/packages/bot/src/commands/ask.ts b/packages/bot/src/commands/ask.ts index c8191c8..9979b27 100644 --- a/packages/bot/src/commands/ask.ts +++ b/packages/bot/src/commands/ask.ts @@ -89,11 +89,13 @@ export default class implements Command { }; // eslint-disable-next-line unicorn/consistent-function-scoping - const unwrapErr = (result: Result) => { + const unwrapErr = (result: Result): T => { if (result.isErr()) { const err = result.unwrapErr(); throw new GracefulTransactionFailure(err.message, { cause: err }); } + + return result.unwrap(); }; if (ama.modQueue) { @@ -112,13 +114,24 @@ export default class implements Command { }), ); } else { - unwrapErr( + const message = unwrapErr( await this.amaManager.postToAnswersChannel({ ...basePostData, answersChannel: ama.answersChannel, stage: ama.stageOnly, }), ); + + if (message) { + await this.prisma.amaQuestion.update({ + where: { + id: amaQuestion.id, + }, + data: { + answerMessageId: message.id, + }, + }); + } } return amaQuestion; diff --git a/packages/bot/src/components/guest-approve.ts b/packages/bot/src/components/guest-approve.ts index 0de744a..54b3366 100644 --- a/packages/bot/src/components/guest-approve.ts +++ b/packages/bot/src/components/guest-approve.ts @@ -50,6 +50,15 @@ export default class implements Component> { content: result.unwrapErr().message, ephemeral: true, }); + } else { + await this.prisma.amaQuestion.update({ + where: { + id: question.id, + }, + data: { + answerMessageId: result.unwrap().id, + }, + }); } return interaction.update({ diff --git a/packages/bot/src/components/mod-approve.ts b/packages/bot/src/components/mod-approve.ts index 3c49d33..d5e844b 100644 --- a/packages/bot/src/components/mod-approve.ts +++ b/packages/bot/src/components/mod-approve.ts @@ -64,6 +64,15 @@ export default class implements Component> { content: result.unwrapErr().message, ephemeral: true, }); + } else { + await this.prisma.amaQuestion.update({ + where: { + id: question.id, + }, + data: { + answerMessageId: result.unwrap().id, + }, + }); } } diff --git a/packages/bot/src/components/submit-question.ts b/packages/bot/src/components/submit-question.ts index 62121c5..a3b74e2 100644 --- a/packages/bot/src/components/submit-question.ts +++ b/packages/bot/src/components/submit-question.ts @@ -95,11 +95,13 @@ export default class implements Component> { }; // eslint-disable-next-line unicorn/consistent-function-scoping - const unwrapErr = (result: Result) => { + const unwrapErr = (result: Result): T => { if (result.isErr()) { const err = result.unwrapErr(); throw new GracefulTransactionFailure(err.message, { cause: err }); } + + return result.unwrap(); }; if (ama.modQueue) { @@ -118,13 +120,24 @@ export default class implements Component> { }), ); } else { - unwrapErr( + const message = unwrapErr( await this.amaManager.postToAnswersChannel({ ...basePostData, answersChannel: ama.answersChannel, stage: ama.stageOnly, }), ); + + if (message) { + await this.prisma.amaQuestion.update({ + where: { + id: amaQuestion.id, + }, + data: { + answerMessageId: message.id, + }, + }); + } } return amaQuestion; diff --git a/packages/bot/src/struct/AmaManager.ts b/packages/bot/src/struct/AmaManager.ts index 2405848..f811dc8 100644 --- a/packages/bot/src/struct/AmaManager.ts +++ b/packages/bot/src/struct/AmaManager.ts @@ -1,7 +1,7 @@ import { PrismaClient } from '@prisma/client'; import type { AmaQuestion } from '@prisma/client'; import { Result } from '@sapphire/result'; -import type { MessageActionRowComponentBuilder, TextChannel, User } from 'discord.js'; +import type { Message, MessageActionRowComponentBuilder, TextChannel, User } from 'discord.js'; import { ActionRowBuilder, ButtonBuilder, EmbedBuilder, ButtonStyle, Client } from 'discord.js'; import { singleton } from 'tsyringe'; import { Colors } from '../util/colors.js'; @@ -136,7 +136,7 @@ export class AmaManager { stage, answersChannel, ...embedData - }: PostToAnswerChannelData): Promise> { + }: PostToAnswerChannelData): Promise, Error>> { const embed = this.getBaseEmbed(embedData); embed.setColor(Colors.Blurple); @@ -155,15 +155,6 @@ export class AmaManager { embeds: [embed], }); - await this.prisma.amaQuestion.update({ - where: { - id: question.id, - }, - data: { - answerMessageId: message.id, - }, - }); - - return Result.ok(); + return Result.ok(message); } }