feat(dashboard): add unread count for match chats

Track unread messages in match chats and display count badge:
- Schema: Add user1LastReadAt/user2LastReadAt to Match model
- Backend: Calculate unreadCount in dashboard API
- Socket: Update lastReadAt when user joins match room
- Frontend: Display red badge with unread count on match avatar
This commit is contained in:
Radosław Gierwiało
2025-11-21 21:46:00 +01:00
parent 2c0620db6a
commit 78280ca8d8
6 changed files with 121 additions and 15 deletions

View File

@@ -180,6 +180,14 @@ router.get('/', authenticate, async (req, res, next) => {
const lastMessage = match.room?.messages[0];
const lastMessageAt = lastMessage ? lastMessage.createdAt : match.createdAt;
// Calculate unread count
const myLastReadAt = isUser1 ? match.user1LastReadAt : match.user2LastReadAt;
const unreadCount = myLastReadAt
? (match.room?.messages || []).filter(
(m) => m.userId !== userId && new Date(m.createdAt) > new Date(myLastReadAt)
).length
: (match.room?.messages || []).filter((m) => m.userId !== userId).length;
return {
id: match.id,
slug: match.slug,
@@ -197,6 +205,7 @@ router.get('/', authenticate, async (req, res, next) => {
},
videoExchange,
ratings,
unreadCount,
lastMessageAt,
status: match.status,
};