69 lines
1.6 KiB
Go
69 lines
1.6 KiB
Go
package service
|
|
|
|
import (
|
|
"errors"
|
|
|
|
"git.urec56.ru/urec/chat_back_go/internal/domain"
|
|
"git.urec56.ru/urec/chat_back_go/internal/logger"
|
|
"git.urec56.ru/urec/chat_back_go/internal/repository"
|
|
)
|
|
|
|
type userService struct {
|
|
ur repository.User
|
|
auth Auth
|
|
l logger.Log
|
|
}
|
|
|
|
func newUserService(user repository.User, auth Auth, l logger.Log) *userService {
|
|
return &userService{ur: user, auth: auth, l: l}
|
|
}
|
|
|
|
func (s *userService) Get(userID int) (domain.User, error) {
|
|
u, err := s.ur.GetByID(userID)
|
|
return u, err
|
|
}
|
|
|
|
func (s *userService) GetVerificated(userID int) (domain.User, error) {
|
|
u, err := s.ur.GetByID(userID)
|
|
if err != nil {
|
|
return u, err
|
|
}
|
|
if u.Role < domain.VerificatedUser {
|
|
return u, domain.UnverifiedUserError
|
|
}
|
|
return u, err
|
|
}
|
|
|
|
func (s *userService) GetAll(username string) ([]domain.User, error) {
|
|
users, err := s.ur.GetAll(username)
|
|
return users, err
|
|
}
|
|
|
|
func (s *userService) FindOne(username, email string) (domain.User, error) {
|
|
user, err := s.ur.FindOne(username, email)
|
|
if err != nil {
|
|
return domain.User{}, domain.InternalServerError
|
|
}
|
|
return user, nil
|
|
}
|
|
|
|
func (s *userService) Register(userData domain.UserRegister) (string, error) {
|
|
hashedPassword, err := s.auth.HashPassword(userData.Password)
|
|
if err != nil {
|
|
return "", domain.InternalServerError
|
|
}
|
|
|
|
user, err := s.ur.Register(userData.Email, hashedPassword, userData.Username, userData.DateOfBirth.Time)
|
|
if err != nil {
|
|
if errors.Is(err, domain.UserAlreadyExistsError) {
|
|
return "", err
|
|
}
|
|
return "", domain.InternalServerError
|
|
}
|
|
|
|
authToken, err := s.auth.EncodeAuthToken(user.ID)
|
|
if err != nil {
|
|
return "", domain.InternalServerError
|
|
}
|
|
return authToken, err
|
|
}
|