From 52533d4b38cc39561e51bbd3ffb47f00de9a5cf1 Mon Sep 17 00:00:00 2001 From: Alan Mosko Date: Thu, 27 Jul 2023 09:23:44 -0300 Subject: [PATCH] =?UTF-8?q?Adi=C3=A7=C3=A3o=20de=20Get=20Last=20Message=20?= =?UTF-8?q?e=20Archive=20por=20Chat?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/validate/validate.schema.ts | 3 +- src/whatsapp/dto/chat.dto.ts | 5 +- src/whatsapp/services/whatsapp.service.ts | 62 +++++++++++++++++++---- 3 files changed, 56 insertions(+), 14 deletions(-) diff --git a/src/validate/validate.schema.ts b/src/validate/validate.schema.ts index 8c1a4667..feb5da59 100644 --- a/src/validate/validate.schema.ts +++ b/src/validate/validate.schema.ts @@ -508,6 +508,7 @@ export const archiveChatSchema: JSONSchema7 = { $id: v4(), type: 'object', properties: { + chat: { type: 'string' }, lastMessage: { type: 'object', properties: { @@ -528,7 +529,7 @@ export const archiveChatSchema: JSONSchema7 = { }, archive: { type: 'boolean', enum: [true, false] }, }, - required: ['lastMessage', 'archive'], + required: ['archive'], }; export const deleteMessageSchema: JSONSchema7 = { diff --git a/src/whatsapp/dto/chat.dto.ts b/src/whatsapp/dto/chat.dto.ts index f2f9b1cc..f8a5da5f 100644 --- a/src/whatsapp/dto/chat.dto.ts +++ b/src/whatsapp/dto/chat.dto.ts @@ -53,13 +53,14 @@ export class ReadMessageDto { read_messages: Key[]; } -class LastMessage { +export class LastMessage { key: Key; messageTimestamp?: number; } export class ArchiveChatDto { - lastMessage: LastMessage; + lastMessage?: LastMessage; + chat?: string; archive: boolean; } diff --git a/src/whatsapp/services/whatsapp.service.ts b/src/whatsapp/services/whatsapp.service.ts index 6de7d847..9729ceed 100644 --- a/src/whatsapp/services/whatsapp.service.ts +++ b/src/whatsapp/services/whatsapp.service.ts @@ -74,6 +74,7 @@ import { getBase64FromMediaMessageDto, NumberBusiness, OnWhatsAppDto, + LastMessage, PrivacySettingDto, ReadMessageDto, WhatsAppNumberDto, @@ -2345,23 +2346,62 @@ export class WAStartupService { throw new InternalServerErrorException('Read messages fail', error.toString()); } } + + public async getLastMessage(number: string) { + const messages = await this.fetchMessages({ + where: { + key: { + remoteJid: number + }, + owner: this.instance.name + } + }); + + let lastMessage = messages.pop(); + + for (const message of messages) { + if ( + message.messageTimestamp?.low >= lastMessage.messageTimestamp?.low + || message.messageTimestamp >= lastMessage.messageTimestamp + ) { + lastMessage = message; + } + } + + return lastMessage as unknown as LastMessage; + } public async archiveChat(data: ArchiveChatDto) { this.logger.verbose('Archiving chat'); try { - data.lastMessage.messageTimestamp = data.lastMessage?.messageTimestamp ?? Date.now(); + let last_message = data.lastMessage; + let number = data.chat; + + if(!last_message && number) { + last_message = await this.getLastMessage(number); + } else { + last_message = data.lastMessage; + last_message.messageTimestamp = last_message?.messageTimestamp ?? Date.now(); + number = last_message?.key?.remoteJid; + } + + if (!last_message || Object.keys(last_message).length === 0) { + throw new NotFoundException("Last message not found"); + } + console.log(last_message); + await this.client.chatModify( { - archive: data.archive, - lastMessages: [data.lastMessage], - }, - data.lastMessage.key.remoteJid, - ); - - return { - chatId: data.lastMessage.key.remoteJid, - archived: true, - }; + archive: data.archive, + lastMessages: [last_message] + }, + this.createJid(number) + ); + + return { + chatId: number, + archived: true, + }; } catch (error) { throw new InternalServerErrorException({ archived: false,