package services import ( "lv8girl/internal/models" "lv8girl/internal/repositories" ) type MessageService struct { messageRepo *repositories.MessageRepository userRepo *repositories.UserRepository } func NewMessageService() *MessageService { return &MessageService{ messageRepo: repositories.NewMessageRepository(), userRepo: repositories.NewUserRepository(), } } func (s *MessageService) SendMessage(fromUserID, toUserID uint, content string) error { message := &models.PrivateMessage{ FromUserID: fromUserID, ToUserID: toUserID, Content: content, IsRead: false, } return s.messageRepo.Create(message) } func (s *MessageService) GetUnreadCount(userID uint) (int64, error) { return s.messageRepo.CountUnread(userID) } type ConversationView struct { UserID uint Username string Avatar string LastMsg string Time string Unread int64 } func (s *MessageService) GetConversations(userID uint) ([]ConversationView, error) { messages, err := s.messageRepo.FindConversations(userID) if err != nil { return nil, err } userMap := make(map[uint]bool) for _, msg := range messages { if msg.FromUserID != userID { userMap[msg.FromUserID] = true } if msg.ToUserID != userID { userMap[msg.ToUserID] = true } } var conversations []ConversationView for otherID := range userMap { otherUser, err := s.userRepo.FindByID(otherID) if err != nil { continue } lastMsg, _ := s.messageRepo.FindLastMessage(userID, otherID) unread, _ := s.messageRepo.CountUnreadFromUser(otherID, userID) avatar := "" if otherUser.Avatar != "" { avatar = "/" + otherUser.Avatar } conversations = append(conversations, ConversationView{ UserID: otherUser.ID, Username: otherUser.Username, Avatar: avatar, LastMsg: lastMsg.Content, Time: lastMsg.CreatedAt.Format("2006-01-02 15:04"), Unread: unread, }) } return conversations, nil } func (s *MessageService) NotifyUserApproved(adminID, userID uint) error { return s.SendMessage(adminID, userID, "恭喜!您的账号已通过管理员审核,现在可以正常登录使用了。") } func (s *MessageService) NotifyUserRejected(adminID, userID uint) error { return s.SendMessage(adminID, userID, "您的账号审核未通过。如有疑问,请联系管理员。") } func (s *MessageService) NotifyUserBanned(adminID, userID uint) error { return s.SendMessage(adminID, userID, "您的账号已被管理员封禁。如有疑问,请联系管理员。") }