diff --git a/src/whatsapp/repository/message.repository.ts b/src/whatsapp/repository/message.repository.ts index d7675977..594c757b 100644 --- a/src/whatsapp/repository/message.repository.ts +++ b/src/whatsapp/repository/message.repository.ts @@ -1,4 +1,4 @@ -import { opendirSync, readFileSync } from 'fs'; +import { opendirSync, readFileSync, rmSync } from 'fs'; import { join } from 'path'; import { ConfigService, StoreConf } from '../../config/env.config'; @@ -18,6 +18,19 @@ export class MessageRepository extends Repository { private readonly logger = new Logger('MessageRepository'); + public buildQuery(query: MessageQuery): MessageQuery { + for (const [o, p] of Object.entries(query?.where)) { + if (typeof p === 'object' && p !== null && !Array.isArray(p)) { + for (const [k, v] of Object.entries(p)) { + query.where[`${o}.${k}`] = v; + } + delete query.where[o]; + } + } + + return query; + } + public async insert(data: MessageRaw[], instanceName: string, saveDb = false): Promise { this.logger.verbose('inserting messages'); @@ -91,14 +104,7 @@ export class MessageRepository extends Repository { this.logger.verbose('finding messages'); if (this.dbSettings.ENABLED) { this.logger.verbose('finding messages in db'); - for (const [o, p] of Object.entries(query?.where)) { - if (typeof p === 'object' && p !== null && !Array.isArray(p)) { - for (const [k, v] of Object.entries(p)) { - query.where[`${o}.${k}`] = v; - } - delete query.where[o]; - } - } + query = this.buildQuery(query); return await this.messageModel .find({ ...query.where }) @@ -197,4 +203,26 @@ export class MessageRepository extends Repository { this.logger.error(error); } } + + public async delete(query: MessageQuery) { + try { + this.logger.verbose('deleting message'); + if (this.dbSettings.ENABLED) { + this.logger.verbose('deleting message in db'); + query = this.buildQuery(query); + + return await this.messageModel.deleteOne({ ...query.where }); + } + + this.logger.verbose('deleting message in store'); + rmSync(join(this.storePath, 'messages', query.where.owner, query.where.key.id + '.json'), { + force: true, + recursive: true, + }); + + return { deleted: { messageId: query.where.key.id } }; + } catch (error) { + return { error: error?.toString() }; + } + } } diff --git a/src/whatsapp/services/chatwoot.service.ts b/src/whatsapp/services/chatwoot.service.ts index da0cf481..a2f1c3ee 100644 --- a/src/whatsapp/services/chatwoot.service.ts +++ b/src/whatsapp/services/chatwoot.service.ts @@ -1025,7 +1025,18 @@ export class ChatwootService { limit: 1, }); if (message.length && message[0].key?.id) { + this.logger.verbose('deleting message in whatsapp. Message id: ' + message[0].key.id); await waInstance?.client.sendMessage(message[0].key.remoteJid, { delete: message[0].key }); + + this.logger.verbose('deleting message in repository. Message id: ' + message[0].key.id); + this.repository.message.delete({ + where: { + owner: instance.instanceName, + chatwoot: { + messageId: body.id, + }, + }, + }); } return { message: 'bot' }; } @@ -1829,6 +1840,16 @@ export class ChatwootService { const message = await this.getMessageByKeyId(instance, body.key.id); if (message?.chatwoot?.messageId && message?.chatwoot?.conversationId) { + this.logger.verbose('deleting message in repository. Message id: ' + body.key.id); + this.repository.message.delete({ + where: { + key: { + id: body.key.id, + }, + owner: instance.instanceName, + }, + }); + this.logger.verbose('deleting message in chatwoot. Message id: ' + body.key.id); return await client.messages.delete({ accountId: this.provider.account_id,