From 5047e6281a6b8022fa66ea2b1728a1599e1742de Mon Sep 17 00:00:00 2001 From: Davidson Gomes Date: Mon, 29 Jul 2024 19:07:26 -0300 Subject: [PATCH] fix: Correct openai session deletion and pause functionality This commit fixes an issue where openai sessions were not being properly deleted or paused. It updates the `openai.service.ts` and `openai.schema.ts` files to correctly handle session deletion and pausing. The `openai.service.ts` file now includes additional checks for session status before deleting or updating. The `openai.schema.ts` file has been updated to include a new 'delete' status option. These changes ensure that openai sessions are properly managed and that the bot can be paused and resumed as intended. This improves the overall functionality and user experience of the application. --- .../openai/services/openai.service.ts | 148 ++++++++++++++---- .../openai/validate/openai.schema.ts | 2 +- 2 files changed, 116 insertions(+), 34 deletions(-) diff --git a/src/api/integrations/openai/services/openai.service.ts b/src/api/integrations/openai/services/openai.service.ts index 06d8a6af..0041d67d 100644 --- a/src/api/integrations/openai/services/openai.service.ts +++ b/src/api/integrations/openai/services/openai.service.ts @@ -730,16 +730,43 @@ export class OpenaiService { }) .then((instance) => instance.id); + const defaultSettingCheck = await this.prismaRepository.typebotSetting.findFirst({ + where: { + instanceId, + }, + }); + const remoteJid = data.remoteJid; const status = data.status; - if (status === 'closed') { + if (status === 'delete') { await this.prismaRepository.openaiSession.deleteMany({ where: { remoteJid: remoteJid, }, }); + return { openai: { remoteJid: remoteJid, status: status } }; + } + + if (status === 'closed') { + if (defaultSettingCheck?.keepOpen) { + await this.prismaRepository.openaiSession.updateMany({ + where: { + remoteJid: remoteJid, + }, + data: { + status: 'closed', + }, + }); + } else { + await this.prismaRepository.openaiSession.deleteMany({ + where: { + remoteJid: remoteJid, + }, + }); + } + return { openai: { ...instance, openai: { remoteJid: remoteJid, status: status } } }; } else { const session = await this.prismaRepository.openaiSession.updateMany({ @@ -1085,17 +1112,28 @@ export class OpenaiService { participant: string; }; - if (!listeningFromMe && key.fromMe) { + if (stopBotFromMe && key.fromMe && session) { + if (keepOpen) { + await this.prismaRepository.openaiSession.update({ + where: { + id: session.id, + }, + data: { + status: 'closed', + }, + }); + } else { + await this.prismaRepository.openaiSession.deleteMany({ + where: { + openaiBotId: findOpenai.id, + remoteJid: remoteJid, + }, + }); + } return; } - if (stopBotFromMe && listeningFromMe && key.fromMe && session) { - await this.prismaRepository.openaiSession.deleteMany({ - where: { - openaiBotId: findOpenai.id, - remoteJid: remoteJid, - }, - }); + if (!listeningFromMe && key.fromMe) { return; } @@ -1295,12 +1333,23 @@ export class OpenaiService { const diffInMinutes = Math.floor(diff / 1000 / 60); if (diffInMinutes > settings.expire) { - await this.prismaRepository.openaiSession.deleteMany({ - where: { - openaiBotId: openaiBot.id, - remoteJid: remoteJid, - }, - }); + if (settings.keepOpen) { + await this.prismaRepository.openaiSession.update({ + where: { + id: session.id, + }, + data: { + status: 'closed', + }, + }); + } else { + await this.prismaRepository.openaiSession.deleteMany({ + where: { + openaiBotId: openaiBot.id, + remoteJid: remoteJid, + }, + }); + } await this.initAssistantNewSession(instance, remoteJid, openaiBot, settings, session, content); return; @@ -1339,12 +1388,23 @@ export class OpenaiService { } if (settings.keywordFinish && content.toLowerCase() === settings.keywordFinish.toLowerCase()) { - await this.prismaRepository.openaiSession.deleteMany({ - where: { - openaiBotId: openaiBot.id, - remoteJid: remoteJid, - }, - }); + if (settings.keepOpen) { + await this.prismaRepository.openaiSession.update({ + where: { + id: session.id, + }, + data: { + status: 'closed', + }, + }); + } else { + await this.prismaRepository.openaiSession.deleteMany({ + where: { + openaiBotId: openaiBot.id, + remoteJid: remoteJid, + }, + }); + } return; } @@ -1555,12 +1615,23 @@ export class OpenaiService { const diffInMinutes = Math.floor(diff / 1000 / 60); if (diffInMinutes > settings.expire) { - await this.prismaRepository.openaiSession.deleteMany({ - where: { - openaiBotId: openaiBot.id, - remoteJid: remoteJid, - }, - }); + if (settings.keepOpen) { + await this.prismaRepository.openaiSession.update({ + where: { + id: session.id, + }, + data: { + status: 'closed', + }, + }); + } else { + await this.prismaRepository.openaiSession.deleteMany({ + where: { + openaiBotId: openaiBot.id, + remoteJid: remoteJid, + }, + }); + } await this.initChatCompletionNewSession(instance, remoteJid, openaiBot, settings, session, content); return; @@ -1599,12 +1670,23 @@ export class OpenaiService { } if (settings.keywordFinish && content.toLowerCase() === settings.keywordFinish.toLowerCase()) { - await this.prismaRepository.openaiSession.deleteMany({ - where: { - openaiBotId: openaiBot.id, - remoteJid: remoteJid, - }, - }); + if (settings.keepOpen) { + await this.prismaRepository.openaiSession.update({ + where: { + id: session.id, + }, + data: { + status: 'closed', + }, + }); + } else { + await this.prismaRepository.openaiSession.deleteMany({ + where: { + openaiBotId: openaiBot.id, + remoteJid: remoteJid, + }, + }); + } return; } diff --git a/src/api/integrations/openai/validate/openai.schema.ts b/src/api/integrations/openai/validate/openai.schema.ts index bb8e280c..7131e0dd 100644 --- a/src/api/integrations/openai/validate/openai.schema.ts +++ b/src/api/integrations/openai/validate/openai.schema.ts @@ -66,7 +66,7 @@ export const openaiStatusSchema: JSONSchema7 = { type: 'object', properties: { remoteJid: { type: 'string' }, - status: { type: 'string', enum: ['opened', 'closed', 'paused'] }, + status: { type: 'string', enum: ['opened', 'closed', 'paused', 'delete'] }, }, required: ['remoteJid', 'status'], ...isNotEmpty('remoteJid', 'status'),