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.
This commit is contained in:
Davidson Gomes 2024-07-29 19:07:26 -03:00
parent 7ba1f2fdf4
commit 5047e6281a
2 changed files with 116 additions and 34 deletions

View File

@ -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;
}

View File

@ -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'),