package service import ( "errors" "serv_golang_rest_api/internal/model" "serv_golang_rest_api/internal/repository" "golang.org/x/crypto/bcrypt" ) type UserService struct { userRepo *repository.UserRepository } func NewUserService(userRepo *repository.UserRepository) *UserService { return &UserService{userRepo: userRepo} } func (s *UserService) CreateUser(req *model.CreateUserRequest) (*model.UserResponse, error) { // Проверяем существует ли пользователь с таким email existingUser, _ := s.userRepo.FindByEmail(req.Email) if existingUser != nil { return nil, errors.New("user with this email already exists") } // Хешируем пароль hashedPassword, err := bcrypt.GenerateFromPassword([]byte(req.Password), bcrypt.DefaultCost) if err != nil { return nil, err } user := &model.User{ Name: req.Name, Email: req.Email, Password: string(hashedPassword), } if err := s.userRepo.Create(user); err != nil { return nil, err } return s.toUserResponse(user), nil } func (s *UserService) GetUserByID(id uint) (*model.UserResponse, error) { user, err := s.userRepo.FindByID(id) if err != nil { return nil, errors.New("user not found") } return s.toUserResponse(user), nil } func (s *UserService) GetAllUsers() ([]model.UserResponse, error) { users, err := s.userRepo.FindAll() if err != nil { return nil, err } var responses []model.UserResponse for _, user := range users { responses = append(responses, *s.toUserResponse(&user)) } return responses, nil } func (s *UserService) toUserResponse(user *model.User) *model.UserResponse { return &model.UserResponse{ ID: user.ID, CreatedAt: user.CreatedAt, UpdatedAt: user.UpdatedAt, Name: user.Name, Email: user.Email, } }