first commit
This commit is contained in:
62
internal/service/admin_service.go
Normal file
62
internal/service/admin_service.go
Normal file
@@ -0,0 +1,62 @@
|
||||
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)
|
||||
}
|
||||
Reference in New Issue
Block a user