From 45acc6d281a64990d511e32b53c619ba36109cdd Mon Sep 17 00:00:00 2001 From: yousseefs Date: Tue, 15 Oct 2024 20:10:59 +0100 Subject: [PATCH] feat: add logical or permanent message deletion based on env config --- .env.example | 1 + .../whatsapp/whatsapp.baileys.service.ts | 44 ++++++++++++++++++- src/config/env.config.ts | 7 +++ 3 files changed, 51 insertions(+), 1 deletion(-) diff --git a/.env.example b/.env.example index 893a714c..3f8b28db 100644 --- a/.env.example +++ b/.env.example @@ -41,6 +41,7 @@ DATABASE_SAVE_DATA_LABELS=true DATABASE_SAVE_DATA_HISTORIC=true DATABASE_SAVE_IS_ON_WHATSAPP=true DATABASE_SAVE_IS_ON_WHATSAPP_DAYS=7 +DATABASE_DELETE_MESSAGE=true # RabbitMQ - Environment variables RABBITMQ_ENABLED=false diff --git a/src/api/integrations/channel/whatsapp/whatsapp.baileys.service.ts b/src/api/integrations/channel/whatsapp/whatsapp.baileys.service.ts index d10fb748..45d655e7 100644 --- a/src/api/integrations/channel/whatsapp/whatsapp.baileys.service.ts +++ b/src/api/integrations/channel/whatsapp/whatsapp.baileys.service.ts @@ -3003,7 +3003,49 @@ export class BaileysStartupService extends ChannelStartupService { public async deleteMessage(del: DeleteMessage) { try { - return await this.client.sendMessage(del.remoteJid, { delete: del }); + const response = await this.client.sendMessage(del.remoteJid, { delete: del }); + if (response) { + const messageId = response.message?.protocolMessage?.key?.id; + if (messageId) { + const isLogicalDeleted = configService.get('DATABASE').DELETE_DATA.LOGICAL_MESSAGE_DELETE; + let message = await this.prismaRepository.message.findUnique({ + where: { id: messageId }, + }); + if (isLogicalDeleted) { + if (!message) return response; + const existingKey = typeof message?.key === 'object' && message.key !== null ? message.key : {}; + message = await this.prismaRepository.message.update({ + where: { id: messageId }, + data: { + key: { + ...existingKey, + deleted: true, + }, + }, + }); + } else { + await this.prismaRepository.message.deleteMany({ + where: { + id: messageId, + }, + }); + } + this.sendDataWebhook(Events.MESSAGES_DELETE, { + id: message.id, + instanceId: message.instanceId, + key: message.key, + messageType: message.messageType, + status: message.status, + source: message.source, + messageTimestamp: message.messageTimestamp, + pushName: message.pushName, + participant: message.participant, + message: message.message, + }); + } + } + + return response; } catch (error) { throw new InternalServerErrorException('Error while deleting message for everyone', error?.toString()); } diff --git a/src/config/env.config.ts b/src/config/env.config.ts index 470c9473..7538e01d 100644 --- a/src/config/env.config.ts +++ b/src/config/env.config.ts @@ -55,8 +55,12 @@ export type Database = { CONNECTION: DBConnection; PROVIDER: string; SAVE_DATA: SaveData; + DELETE_DATA: DeleteData; }; +export type DeleteData = { + LOGICAL_MESSAGE_DELETE: boolean; +}; export type EventsRabbitmq = { APPLICATION_STARTUP: boolean; INSTANCE_CREATE: boolean; @@ -300,6 +304,9 @@ export class ConfigService { IS_ON_WHATSAPP: process.env?.DATABASE_SAVE_IS_ON_WHATSAPP === 'true', IS_ON_WHATSAPP_DAYS: Number.parseInt(process.env?.DATABASE_SAVE_IS_ON_WHATSAPP_DAYS ?? '7'), }, + DELETE_DATA: { + LOGICAL_MESSAGE_DELETE: process.env?.DATABASE_DELETE_MESSAGE === 'true', + }, }, RABBITMQ: { ENABLED: process.env?.RABBITMQ_ENABLED === 'true',