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:
@@ -42,13 +42,14 @@ func (h *AuthHandler) Routes() chi.Router {
|
||||
r.Post("/login", h.Login)
|
||||
r.Post("/logout", h.Logout)
|
||||
r.Get("/profile", h.GetProfile)
|
||||
r.Put("/profile", h.UpdateProfile)
|
||||
|
||||
return r
|
||||
}
|
||||
|
||||
// Обработчик для OPTIONS запросов
|
||||
func (h *AuthHandler) handleOptions(w http.ResponseWriter, r *http.Request) {
|
||||
w.Header().Set("Access-Control-Allow-Methods", "POST, GET, OPTIONS")
|
||||
w.Header().Set("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS")
|
||||
w.Header().Set("Access-Control-Allow-Headers", "Content-Type, Authorization")
|
||||
w.Header().Set("Access-Control-Max-Age", "300")
|
||||
w.WriteHeader(http.StatusOK)
|
||||
|
||||
@@ -26,6 +26,42 @@ 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)
|
||||
@@ -33,27 +69,10 @@ func (s *authService) Register(user *models.User) error {
|
||||
return errors.New("user with this email already exists")
|
||||
}
|
||||
|
||||
// Валидация обязательных полей
|
||||
if user.FirstName == "" {
|
||||
return errors.New("first name is required")
|
||||
// Хешируем пароль
|
||||
if err := user.HashPassword(); err != nil {
|
||||
return err
|
||||
}
|
||||
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
|
||||
// }
|
||||
|
||||
return s.userRepo.Create(user)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user