Files
Super-HomeworkManager/internal/service/admin_service.go
2025-12-30 21:47:39 +09:00

63 lines
1.2 KiB
Go

package service
import (
"errors"
"homework-manager/internal/models"
"homework-manager/internal/repository"
)
var (
ErrCannotDeleteSelf = errors.New("cannot delete yourself")
ErrCannotChangeSelfRole = errors.New("cannot change your own role")
)
type AdminService struct {
userRepo *repository.UserRepository
}
func NewAdminService() *AdminService {
return &AdminService{
userRepo: repository.NewUserRepository(),
}
}
func (s *AdminService) GetAllUsers() ([]models.User, error) {
return s.userRepo.FindAll()
}
func (s *AdminService) GetUserByID(id uint) (*models.User, error) {
return s.userRepo.FindByID(id)
}
func (s *AdminService) DeleteUser(adminID, targetID uint) error {
if adminID == targetID {
return ErrCannotDeleteSelf
}
_, err := s.userRepo.FindByID(targetID)
if err != nil {
return ErrUserNotFound
}
return s.userRepo.Delete(targetID)
}
func (s *AdminService) ChangeRole(adminID, targetID uint, newRole string) error {
if adminID == targetID {
return ErrCannotChangeSelfRole
}
if newRole != "admin" && newRole != "user" {
return errors.New("invalid role")
}
user, err := s.userRepo.FindByID(targetID)
if err != nil {
return ErrUserNotFound
}
user.Role = newRole
return s.userRepo.Update(user)
}