feat: method to mark chat as unread

This commit is contained in:
Neander de Souza 2024-05-06 09:08:36 -03:00
parent 633dbb82d3
commit 8e9a1e2ba5
6 changed files with 100 additions and 0 deletions

View File

@ -4,6 +4,7 @@ import {
BlockUserDto,
DeleteMessage,
getBase64FromMediaMessageDto,
MarkChatUnreadDto,
NumberDto,
PrivacySettingDto,
ProfileNameDto,
@ -40,6 +41,11 @@ export class ChatController {
return await this.waMonitor.waInstances[instanceName].archiveChat(data);
}
public async markChatUnread({ instanceName }: InstanceDto, data: MarkChatUnreadDto) {
logger.verbose('requested markChatUnread from ' + instanceName + ' instance');
return await this.waMonitor.waInstances[instanceName].markChatUnread(data);
}
public async deleteMessage({ instanceName }: InstanceDto, data: DeleteMessage) {
logger.verbose('requested deleteMessage from ' + instanceName + ' instance');
return await this.waMonitor.waInstances[instanceName].deleteMessage(data);

View File

@ -73,6 +73,11 @@ export class ArchiveChatDto {
archive: boolean;
}
export class MarkChatUnreadDto {
lastMessage?: LastMessage;
chat?: string;
}
class PrivacySetting {
readreceipts: WAReadReceiptsValue;
profile: WAPrivacyValue;

View File

@ -6,6 +6,7 @@ import {
blockUserSchema,
contactValidateSchema,
deleteMessageSchema,
markChatUnreadSchema,
messageUpSchema,
messageValidateSchema,
presenceSchema,
@ -24,6 +25,7 @@ import {
BlockUserDto,
DeleteMessage,
getBase64FromMediaMessageDto,
MarkChatUnreadDto,
NumberDto,
PrivacySettingDto,
ProfileNameDto,
@ -98,6 +100,23 @@ export class ChatRouter extends RouterBroker {
return res.status(HttpStatus.CREATED).json(response);
})
.put(this.routerPath('markChatUnread'), ...guards, async (req, res) => {
logger.verbose('request received in markChatUnread');
logger.verbose('request body: ');
logger.verbose(req.body);
logger.verbose('request query: ');
logger.verbose(req.query);
const response = await this.dataValidate<MarkChatUnreadDto>({
request: req,
schema: markChatUnreadSchema,
ClassRef: MarkChatUnreadDto,
execute: (instance, data) => chatController.markChatUnread(instance, data),
});
return res.status(HttpStatus.CREATED).json(response);
})
.delete(this.routerPath('deleteMessageForEveryone'), ...guards, async (req, res) => {
logger.verbose('request received in deleteMessageForEveryone');
logger.verbose('request body: ');

View File

@ -68,6 +68,7 @@ import {
DeleteMessage,
getBase64FromMediaMessageDto,
LastMessage,
MarkChatUnreadDto,
NumberBusiness,
OnWhatsAppDto,
PrivacySettingDto,
@ -2714,6 +2715,45 @@ export class BaileysStartupService extends ChannelStartupService {
}
}
public async markChatUnread(data: MarkChatUnreadDto) {
this.logger.verbose('Marking chat as unread');
try {
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');
}
await this.client.chatModify(
{
markRead: false,
lastMessages: [last_message],
},
this.createJid(number),
);
return {
chatId: number,
markedChatUnread: true,
};
} catch (error) {
throw new InternalServerErrorException({
markedChatUnread: false,
message: ['An error occurred while marked unread the chat. Open a calling.', error.toString()],
});
}
}
public async deleteMessage(del: DeleteMessage) {
this.logger.verbose('Deleting message');
try {

View File

@ -1258,6 +1258,9 @@ export class BusinessStartupService extends ChannelStartupService {
public async archiveChat() {
throw new BadRequestException('Method not available on WhatsApp Business API');
}
public async markChatUnread() {
throw new BadRequestException('Method not available on WhatsApp Business API');
}
public async fetchProfile() {
throw new BadRequestException('Method not available on WhatsApp Business API');
}

View File

@ -597,6 +597,33 @@ export const archiveChatSchema: JSONSchema7 = {
required: ['archive'],
};
export const markChatUnreadSchema: JSONSchema7 = {
$id: v4(),
type: 'object',
properties: {
chat: { type: 'string' },
lastMessage: {
type: 'object',
properties: {
key: {
type: 'object',
properties: {
id: { type: 'string' },
remoteJid: { type: 'string' },
fromMe: { type: 'boolean', enum: [true, false] },
},
required: ['id', 'fromMe', 'remoteJid'],
...isNotEmpty('id', 'remoteJid'),
},
messageTimestamp: { type: 'integer', minLength: 1 },
},
required: ['key'],
...isNotEmpty('messageTimestamp'),
},
},
required: ['lastMessage'],
};
export const deleteMessageSchema: JSONSchema7 = {
$id: v4(),
type: 'object',