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