diff --git a/src/services/chatService.ts b/src/services/chatService.ts index f3405f7..a220abe 100644 --- a/src/services/chatService.ts +++ b/src/services/chatService.ts @@ -25,23 +25,26 @@ export const getLastMessage = async (chats: any) => { return lastMessages; }; -export const getUnreadMessages = async (chats: any, user: any) => - Promise.all( - chats.map(async (chat: any) => ({ - chatId: chat.chat._id, - unreadMessagesCount: await Message.countDocuments({ +export const getUnreadMessages = async (chats: any, user: any) => { + const mentionRegex = /@[[^]]+](([^)]+))/g; + return Promise.all( + chats.map(async (chat: any) => { + const unreadMessages = await Message.find({ chatId: chat.chat._id, + senderId: { $ne: user._id }, readBy: { $nin: [user._id] }, - }), - isMentioned: - (await Message.exists({ - chatId: chat.chat._id, - readBy: { $nin: [user._id] }, - senderId: { $ne: user._id }, - content: new RegExp(`@${user.username}`, 'i'), - })) !== null, - })) + }); + return { + chatId: chat.chat._id, + unreadMessagesCount: unreadMessages.length, + isMentioned: + unreadMessages.filter((message: any) => + mentionRegex.test(message.content) + ).length > 0, + }; + }) ); +}; export const getChats = async ( userId: mongoose.Types.ObjectId, diff --git a/src/sockets/messages.ts b/src/sockets/messages.ts index 9ace9fb..c3ea1a8 100644 --- a/src/sockets/messages.ts +++ b/src/sockets/messages.ts @@ -104,11 +104,12 @@ const handleMessaging = async ( ); } }); - const res = { - messageId: message._id, - }; enableDestruction(socket, message, chatId); - ack({ success: true, message: 'Message sent successfully', res }); + ack({ + success: true, + message: 'Message sent successfully', + data: message, + }); }; const handleEditMessage = async (socket: Socket, data: any, ack: Function) => {