From f9cdb6c2f0d28f96807b6d668ece7c8eece5dce4 Mon Sep 17 00:00:00 2001 From: Alma Date: Fri, 11 Apr 2025 12:13:41 +0200 Subject: [PATCH] widget chat 18 --- app/api/rocket-chat/messages/route.ts | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/app/api/rocket-chat/messages/route.ts b/app/api/rocket-chat/messages/route.ts index 27380989..b4a768ae 100644 --- a/app/api/rocket-chat/messages/route.ts +++ b/app/api/rocket-chat/messages/route.ts @@ -70,13 +70,17 @@ export async function GET(request: Request) { const messages: any[] = []; for (const subscription of subscriptionsData.update) { + // Skip if we already have 6 messages + if (messages.length >= 6) break; + console.log(`Fetching messages for room ${subscription.name} using endpoint ${subscription.t === 'c' ? 'channels.messages' : 'im.messages'}`); const endpoint = subscription.t === 'c' ? 'channels.messages' : 'im.messages'; const roomId = subscription.t === 'c' ? subscription.name : subscription.rid; + // Only fetch the last message const messagesResponse = await fetch( - `${baseUrl}/api/v1/${endpoint}?roomId=${roomId}`, + `${baseUrl}/api/v1/${endpoint}?roomId=${roomId}&count=1`, { headers: { 'X-Auth-Token': session.rocketChatToken, @@ -98,14 +102,27 @@ export async function GET(request: Request) { console.log(`Messages response for ${subscription.name}:`, messagesData); if (messagesData.messages && messagesData.messages.length > 0) { - messages.push(...messagesData.messages); + const lastMessage = messagesData.messages[0]; + messages.push({ + ...lastMessage, + roomName: subscription.fname || subscription.name || 'Direct Message', + roomType: subscription.t, + unread: subscription.unread || 0, + userMentions: subscription.userMentions || 0, + groupMentions: subscription.groupMentions || 0, + alert: subscription.alert || false + }); } else { console.log(`No messages found for room: ${roomId}`); } } - console.log('Found messages:', messages.length); - return new Response(JSON.stringify({ messages }), { + // Sort messages by timestamp (newest first) and take only the first 6 + messages.sort((a, b) => new Date(b.ts).getTime() - new Date(a.ts).getTime()); + const limitedMessages = messages.slice(0, 6); + + console.log('Found messages:', limitedMessages.length); + return new Response(JSON.stringify({ messages: limitedMessages }), { status: 200, headers: { 'Content-Type': 'application/json' }, });