fix(server): improve message handling and data privacy
All checks were successful
Build Backend / build (push) Successful in 2m0s
Build Backend / build-docker (push) Successful in 7m38s

- fix unread count calculation logic in message repository
- implement logic to retrieve other participant's last read sequence in conversation handlers
- mask real names in verification record responses for privacy
- improve error reporting in main entry point by using stderr instead of zap logger during initialization
This commit is contained in:
2026-05-09 17:25:09 +08:00
parent 51fe517cb2
commit 9f3215d4eb
4 changed files with 22 additions and 8 deletions

View File

@@ -896,10 +896,11 @@ func (r *messageRepository) GetUnreadCountBatch(ctx context.Context, userID stri
}
var rows []row
err := r.db.WithContext(ctx).
Table("conversation_participants cp").
Select("cp.conversation_id, COALESCE(cnt.unread, 0) as count").
Joins("LEFT JOIN (SELECT m.conversation_id, COUNT(m.id) as unread FROM messages m WHERE m.sender_id <> ? AND m.deleted_at IS NULL AND m.conversation_id IN (?) GROUP BY m.conversation_id) cnt ON cnt.conversation_id = cp.conversation_id AND cnt.unread > cp.last_read_seq", userID, convIDs).
Where("cp.user_id = ? AND cp.conversation_id IN (?)", userID, convIDs).
Table("messages m").
Select("m.conversation_id, COUNT(m.id) as count").
Joins("JOIN conversation_participants cp ON cp.conversation_id = m.conversation_id AND cp.user_id = ?", userID).
Where("m.sender_id <> ? AND m.deleted_at IS NULL AND m.seq > cp.last_read_seq AND m.conversation_id IN (?)", userID, convIDs).
Group("m.conversation_id").
Scan(&rows).Error
if err != nil {
return nil, err