This commit is contained in:
2026-02-23 23:50:04 +08:00
commit 084d3b0faf
45 changed files with 4090 additions and 0 deletions

View File

@@ -0,0 +1,98 @@
package services
import (
"lv8girl/internal/models"
"lv8girl/internal/repositories"
)
type AdminService struct {
userRepo *repositories.UserRepository
discussionRepo *repositories.DiscussionRepository
commentRepo *repositories.CommentRepository
likeRepo *repositories.LikeRepository
}
func NewAdminService() *AdminService {
return &AdminService{
userRepo: repositories.NewUserRepository(),
discussionRepo: repositories.NewDiscussionRepository(),
commentRepo: repositories.NewCommentRepository(),
likeRepo: repositories.NewLikeRepository(),
}
}
type Stats struct {
Posts int64
Users int64
Comments int64
Likes int64
Online int64
Approved int64
Rejected int64
Pending int64
}
func (s *AdminService) GetStats() (*Stats, error) {
stats := &Stats{}
stats.Posts, _ = s.discussionRepo.Count()
stats.Users, _ = s.userRepo.Count()
stats.Comments, _ = s.commentRepo.Count()
stats.Likes, _ = s.likeRepo.Count()
stats.Online, _ = s.userRepo.CountOnline()
stats.Approved, _ = s.discussionRepo.CountByStatus("approved")
stats.Rejected, _ = s.discussionRepo.CountByStatus("rejected")
stats.Pending, _ = s.discussionRepo.CountByStatus("pending")
return stats, nil
}
func (s *AdminService) GetPendingPosts() ([]models.Discussion, error) {
return s.discussionRepo.FindPending()
}
func (s *AdminService) GetPendingUsers() ([]models.User, error) {
return s.userRepo.FindPending()
}
func (s *AdminService) ApprovePost(id uint) error {
return s.discussionRepo.UpdateStatus(id, "approved")
}
func (s *AdminService) RejectPost(id uint) error {
return s.discussionRepo.UpdateStatus(id, "rejected")
}
func (s *AdminService) DeletePost(id uint) error {
return s.discussionRepo.Delete(id)
}
func (s *AdminService) ApproveUser(id uint) error {
return s.userRepo.UpdateField(id, "status", "approved")
}
func (s *AdminService) RejectUser(id uint) error {
return s.userRepo.UpdateField(id, "status", "rejected")
}
func (s *AdminService) UpdateUserRole(id uint, role string) error {
return s.userRepo.UpdateField(id, "role", role)
}
func (s *AdminService) DeleteUser(id uint) error {
return s.userRepo.Delete(id)
}
func (s *AdminService) GetAllPosts() ([]models.Discussion, error) {
return s.discussionRepo.FindAll()
}
func (s *AdminService) GetAllUsers() ([]models.User, error) {
return s.userRepo.FindAll()
}
func (s *AdminService) GetAllComments() ([]models.Comment, error) {
return s.commentRepo.FindAll()
}
func (s *AdminService) DeleteComment(id uint) error {
return s.commentRepo.Delete(id)
}