63 lines
1.2 KiB
Go
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)
|
|
}
|