diff --git a/serv_nginx/api_bb/internal/handlers/auth.go b/serv_nginx/api_bb/internal/handlers/auth.go index 09916bb..c3d1c7f 100644 --- a/serv_nginx/api_bb/internal/handlers/auth.go +++ b/serv_nginx/api_bb/internal/handlers/auth.go @@ -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) diff --git a/serv_nginx/api_bb/internal/service/auth_service.go b/serv_nginx/api_bb/internal/service/auth_service.go index 8927327..65d3d3c 100644 --- a/serv_nginx/api_bb/internal/service/auth_service.go +++ b/serv_nginx/api_bb/internal/service/auth_service.go @@ -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) }