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("/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)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user