chat_back_go/internal/service/users.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
}