fix(conversations): always show group chats regardless of message count
All checks were successful
Build Backend / build (push) Successful in 5m0s
Build Backend / build-docker (push) Successful in 2m14s

Update conversation list queries to distinguish between private and group chats:
private conversations are only shown when they have messages (last_seq > 0), while group conversations are always displayed even without messages. This applies to both the paginated GetConversations method and the cursor-based GetConversationsByCursor method.
This commit is contained in:
lafay
2026-04-25 15:03:37 +08:00
parent 48f0c4cf2d
commit 3215039ff6

View File

@@ -158,10 +158,10 @@ func (r *messageRepository) GetConversations(userID string, page, pageSize int)
var convs []*model.Conversation var convs []*model.Conversation
var total int64 var total int64
// 获取总数(仅统计有消息的会话) // 获取总数(私聊仅统计有消息的会话,群聊始终显示
r.db.Model(&model.ConversationParticipant{}). r.db.Model(&model.ConversationParticipant{}).
Joins("INNER JOIN conversations c ON c.id = conversation_participants.conversation_id"). Joins("INNER JOIN conversations c ON c.id = conversation_participants.conversation_id").
Where("conversation_participants.user_id = ? AND conversation_participants.hidden_at IS NULL AND c.last_seq > 0", userID). Where("conversation_participants.user_id = ? AND conversation_participants.hidden_at IS NULL AND (c.type != ? OR c.last_seq > 0)", userID, model.ConversationTypePrivate).
Count(&total) Count(&total)
if total == 0 { if total == 0 {
@@ -171,7 +171,7 @@ func (r *messageRepository) GetConversations(userID string, page, pageSize int)
offset := (page - 1) * pageSize offset := (page - 1) * pageSize
err := r.db.Model(&model.Conversation{}). err := r.db.Model(&model.Conversation{}).
Joins("INNER JOIN conversation_participants cp ON conversations.id = cp.conversation_id"). Joins("INNER JOIN conversation_participants cp ON conversations.id = cp.conversation_id").
Where("cp.user_id = ? AND cp.hidden_at IS NULL AND conversations.last_seq > 0", userID). Where("cp.user_id = ? AND cp.hidden_at IS NULL AND (conversations.type != ? OR conversations.last_seq > 0)", userID, model.ConversationTypePrivate).
Preload("Group"). Preload("Group").
Offset(offset). Offset(offset).
Limit(pageSize). Limit(pageSize).
@@ -798,7 +798,7 @@ func (r *messageRepository) GetConversationsByCursor(ctx context.Context, userID
// 构建基础查询 - 关联 conversation_participants 表 // 构建基础查询 - 关联 conversation_participants 表
query := r.db.WithContext(ctx).Model(&model.Conversation{}). query := r.db.WithContext(ctx).Model(&model.Conversation{}).
Joins("INNER JOIN conversation_participants cp ON conversations.id = cp.conversation_id"). Joins("INNER JOIN conversation_participants cp ON conversations.id = cp.conversation_id").
Where("cp.user_id = ? AND cp.hidden_at IS NULL AND conversations.last_seq > 0", userID). Where("cp.user_id = ? AND cp.hidden_at IS NULL AND (conversations.type != ? OR conversations.last_seq > 0)", userID, model.ConversationTypePrivate).
Preload("Group") Preload("Group")
// 会话列表需要特殊处理:先按置顶排序,再按更新时间排序 // 会话列表需要特殊处理:先按置顶排序,再按更新时间排序