diff --git a/cmd/server/main.go b/cmd/server/main.go index 43b2832..ae9e7cc 100644 --- a/cmd/server/main.go +++ b/cmd/server/main.go @@ -2,6 +2,7 @@ package main import ( "context" + "fmt" "os" "os/signal" "syscall" @@ -14,9 +15,8 @@ func main() { // 初始化应用程序(Wire 自动生成) app, err := InitializeApp() if err != nil { - zap.L().Fatal("failed to initialize app", - zap.Error(err), - ) + fmt.Fprintf(os.Stderr, "failed to initialize app: %v\n", err) + os.Exit(1) } // 启动应用程序 diff --git a/internal/handler/message_handler.go b/internal/handler/message_handler.go index ac1da27..869560f 100644 --- a/internal/handler/message_handler.go +++ b/internal/handler/message_handler.go @@ -244,6 +244,12 @@ func (h *MessageHandler) GetConversationByID(c *gin.Context) { // 获取对方用户的已读位置 otherLastReadSeq := int64(0) + for _, p := range allParticipants { + if p.UserID != userID { + otherLastReadSeq = p.LastReadSeq + break + } + } response.Success(c, dto.ConvertConversationToDetailResponse(conv, participants, unreadCount, nil, myLastReadSeq, otherLastReadSeq, isPinned, notificationMuted)) } @@ -768,6 +774,12 @@ func (h *MessageHandler) HandleGetConversation(c *gin.Context) { // 获取对方用户的已读位置 otherLastReadSeq := int64(0) + for _, p := range allParticipants { + if p.UserID != userID { + otherLastReadSeq = p.LastReadSeq + break + } + } response.Success(c, dto.ConvertConversationToDetailResponse(conv, participants, unreadCount, nil, myLastReadSeq, otherLastReadSeq, isPinned, notificationMuted)) } diff --git a/internal/handler/verification_handler.go b/internal/handler/verification_handler.go index 969a3a2..3d98220 100644 --- a/internal/handler/verification_handler.go +++ b/internal/handler/verification_handler.go @@ -6,6 +6,7 @@ import ( "with_you/internal/dto" "with_you/internal/model" "with_you/internal/pkg/response" + "with_you/internal/pkg/sanitizer" "with_you/internal/service" "github.com/gin-gonic/gin" @@ -114,7 +115,7 @@ func convertVerificationRecordToResponse(record *model.VerificationRecord) *dto. UserID: record.UserID, Identity: string(record.Identity), Status: string(record.Status), - RealName: record.RealName, + RealName: sanitizer.MaskValue("real_name", record.RealName), StudentID: record.StudentID, EmployeeID: record.EmployeeID, Department: record.Department, diff --git a/internal/repository/message_repo.go b/internal/repository/message_repo.go index 9bb7ec8..7fc344e 100644 --- a/internal/repository/message_repo.go +++ b/internal/repository/message_repo.go @@ -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