56 lines
1.1 KiB
Go
56 lines
1.1 KiB
Go
package user
|
|
|
|
import (
|
|
"ResendIt/internal/security"
|
|
"errors"
|
|
)
|
|
|
|
var ErrCannotDeleteSelf = errors.New("cannot delete yourself")
|
|
|
|
type Service struct {
|
|
repo *Repository
|
|
}
|
|
|
|
func NewService(r *Repository) *Service {
|
|
return &Service{repo: r}
|
|
}
|
|
|
|
// CreateUser creates a new user with the given username, password, and role
|
|
func (s *Service) CreateUser(username, password, role string) (*User, error) {
|
|
hash, err := security.HashPassword(password)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
u := &User{
|
|
Username: username,
|
|
PasswordHash: hash,
|
|
Role: role,
|
|
}
|
|
|
|
if err := s.repo.Create(u); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return u, nil
|
|
}
|
|
|
|
// GetAllUsers returns all users
|
|
func (s *Service) GetAllUsers() ([]User, error) {
|
|
return s.repo.GetAll()
|
|
}
|
|
|
|
// DeleteUser deletes a user by ID
|
|
func (s *Service) DeleteUser(requesterID, targetID uint) error {
|
|
if requesterID == targetID {
|
|
return ErrCannotDeleteSelf
|
|
}
|
|
|
|
return s.repo.Delete(targetID)
|
|
}
|
|
|
|
// FindByUsername returns a user by username
|
|
func (s *Service) FindByUsername(username string) (*User, error) {
|
|
return s.repo.FindByUsername(username)
|
|
}
|