95 lines
2.3 KiB
Go
95 lines
2.3 KiB
Go
package services
|
|
|
|
import (
|
|
"lv8girl/internal/models"
|
|
"lv8girl/internal/repositories"
|
|
)
|
|
|
|
type UserService struct {
|
|
userRepo *repositories.UserRepository
|
|
discussionRepo *repositories.DiscussionRepository
|
|
commentRepo *repositories.CommentRepository
|
|
messageRepo *repositories.MessageRepository
|
|
}
|
|
|
|
func NewUserService() *UserService {
|
|
return &UserService{
|
|
userRepo: repositories.NewUserRepository(),
|
|
discussionRepo: repositories.NewDiscussionRepository(),
|
|
commentRepo: repositories.NewCommentRepository(),
|
|
messageRepo: repositories.NewMessageRepository(),
|
|
}
|
|
}
|
|
|
|
type UserProfileView struct {
|
|
User *models.User
|
|
Posts []models.Discussion
|
|
PostCount int64
|
|
UnreadCount int64
|
|
IsOwner bool
|
|
}
|
|
|
|
func (s *UserService) GetUserProfile(viewerID, targetUserID uint) (*UserProfileView, error) {
|
|
user, err := s.userRepo.FindByID(targetUserID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
posts, _ := s.discussionRepo.FindByUserID(targetUserID)
|
|
postCount, _ := s.discussionRepo.CountByUserID(targetUserID)
|
|
|
|
var unreadCount int64
|
|
if viewerID != 0 {
|
|
unreadCount, _ = s.messageRepo.CountUnread(viewerID)
|
|
}
|
|
|
|
return &UserProfileView{
|
|
User: user,
|
|
Posts: posts,
|
|
PostCount: postCount,
|
|
UnreadCount: unreadCount,
|
|
IsOwner: viewerID == targetUserID,
|
|
}, nil
|
|
}
|
|
|
|
func (s *UserService) UpdateAvatar(userID uint, avatarPath string) error {
|
|
user, err := s.userRepo.FindByID(userID)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return s.userRepo.UpdateField(user.ID, "avatar", avatarPath)
|
|
}
|
|
|
|
func (s *UserService) GetUserByID(id uint) (*models.User, error) {
|
|
return s.userRepo.FindByID(id)
|
|
}
|
|
|
|
func (s *UserService) UpdateUserStatus(id uint, status string) error {
|
|
return s.userRepo.UpdateField(id, "status", status)
|
|
}
|
|
|
|
func (s *UserService) UpdateUserRole(id uint, role string) error {
|
|
return s.userRepo.UpdateField(id, "role", role)
|
|
}
|
|
|
|
func (s *UserService) DeleteUser(id uint) error {
|
|
return s.userRepo.Delete(id)
|
|
}
|
|
|
|
func (s *UserService) GetPendingUsers() ([]models.User, error) {
|
|
return s.userRepo.FindPending()
|
|
}
|
|
|
|
func (s *UserService) GetAllUsers() ([]models.User, error) {
|
|
return s.userRepo.FindAll()
|
|
}
|
|
|
|
func (s *UserService) GetUserStats() (int64, int64, error) {
|
|
total, err := s.userRepo.Count()
|
|
if err != nil {
|
|
return 0, 0, err
|
|
}
|
|
online, err := s.userRepo.CountOnline()
|
|
return total, online, err
|
|
}
|