lv8girl!
This commit is contained in:
97
internal/services/message.go
Normal file
97
internal/services/message.go
Normal file
@@ -0,0 +1,97 @@
|
||||
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, "您的账号已被管理员封禁。如有疑问,请联系管理员。")
|
||||
}
|
||||
Reference in New Issue
Block a user