modified: serv_nginx/api_bb/internal/handlers/auth.go

modified:   serv_nginx/api_bb/internal/service/auth_service.go
add update user path to put:profile
This commit is contained in:
2025-10-11 05:11:21 +05:00
parent 20d4913f50
commit 7eaddd9f37
2 changed files with 42 additions and 22 deletions
@@ -26,34 +26,53 @@ func NewAuthService(userRepo repository.UserRepository, jwtService JWTService) A
}
}
func (s *authService) UpdateProfile(user *models.User) error {
// Находим существующего пользователя через репозиторий
existingUser, err := s.userRepo.FindByID(user.ID)
if err != nil {
return fmt.Errorf("user not found")
}
// Создаем карту для обновления только разрешенных полей
updateData := &models.User{
ID: existingUser.ID, // Важно сохранить ID
FirstName: user.FirstName,
LastName: user.LastName,
Phone: user.Phone,
Experience: user.Experience,
Goals: user.Goals,
Newsletter: user.Newsletter,
UpdatedAt: time.Now(),
// Не обновляем: Email, Password, Role, CreatedAt
}
// Сохраняем обновленные данные через репозиторий
if err := s.userRepo.Update(updateData); err != nil {
fmt.Errorf("failed to update user: %v", err)
return
}
// Копируем обновленные данные обратно в переданный объект
user.Email = existingUser.Email
user.Password = existingUser.Password
user.Role = existingUser.Role
user.CreatedAt = existingUser.CreatedAt
user.UpdatedAt = updateData.UpdatedAt
return nil
}
func (s *authService) Register(user *models.User) error {
// Проверяем, существует ли пользователь
existingUser, err := s.userRepo.FindByEmail(user.Email)
if err == nil && existingUser != nil {
return errors.New("user with this email already exists")
}
// Валидация обязательных полей
if user.FirstName == "" {
return errors.New("first name is required")
}
if user.LastName == "" {
return errors.New("last name is required")
}
if user.Email == "" {
return errors.New("email is required")
}
if user.Password == "" {
return errors.New("password is required")
}
if len(user.Password) < 6 {
return errors.New("password must be at least 6 characters")
}
// Хешируем пароль (будет вызван в BeforeCreate hook)
// if err := user.HashPassword(); err != nil {
// return err
// }
// Хешируем пароль
if err := user.HashPassword(); err != nil {
return err
}
return s.userRepo.Create(user)
}