modified: serv_nginx/api_bb/internal/handlers/user.go
modified: serv_nginx/api_bb/internal/repository/user_repository.go modified: serv_nginx/api_bb/internal/service/user_service.go modified: serv_nginx/bbvue/src/views/Members.vue set new page for members frontend add new rounter path getAllUsers into backend
This commit is contained in:
@@ -35,7 +35,7 @@ func (h *UserHandler) Routes() chi.Router {
|
||||
|
||||
r.Get("/profile", h.GetProfile)
|
||||
r.Post("/editProfile", h.UpdateProfile)
|
||||
// Убрали маршрут для обслуживания аватаров - теперь это делает AvatarHandler
|
||||
r.Get("/", h.GetUsers) // 👈 ДОБАВЛЯЕМ НОВЫЙ ЭНДПОЙНТ
|
||||
return r
|
||||
}
|
||||
|
||||
@@ -54,6 +54,43 @@ type UserResponse struct {
|
||||
UpdatedAt time.Time `json:"updated_at"`
|
||||
}
|
||||
|
||||
// GetUsers возвращает список всех пользователей
|
||||
func (h *UserHandler) GetUsers(w http.ResponseWriter, r *http.Request) {
|
||||
h.logger.Info("handling get users request",
|
||||
zap.String("method", r.Method),
|
||||
zap.String("path", r.URL.Path),
|
||||
zap.String("remote_addr", r.RemoteAddr),
|
||||
)
|
||||
|
||||
// Получаем пользователя из контекста для проверки аутентификации
|
||||
_, ok := middleware.GetUserFromContext(r.Context())
|
||||
if !ok {
|
||||
h.logger.Warn("get users failed - authentication required")
|
||||
utils.RespondWithError(w, http.StatusUnauthorized, "Authentication required")
|
||||
return
|
||||
}
|
||||
|
||||
// Получаем список пользователей из сервиса
|
||||
users, err := h.userService.GetAllUsers()
|
||||
if err != nil {
|
||||
h.logger.Error("failed to get users from service", zap.Error(err))
|
||||
utils.RespondWithError(w, http.StatusInternalServerError, "Failed to get users: "+err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
// Преобразуем в response формат
|
||||
var userResponses []UserResponse
|
||||
for _, user := range users {
|
||||
userResponses = append(userResponses, toUserResponse(&user))
|
||||
}
|
||||
|
||||
h.logger.Info("users list retrieved successfully",
|
||||
zap.Int("users_count", len(userResponses)),
|
||||
)
|
||||
|
||||
utils.RespondWithJSON(w, http.StatusOK, userResponses)
|
||||
}
|
||||
|
||||
func (h *UserHandler) GetProfile(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
h.logger.Info("handling get profile request",
|
||||
|
||||
@@ -14,18 +14,19 @@ type UserRepository interface {
|
||||
Update(user *models.User) error
|
||||
Delete(id uint) error
|
||||
UpdateExcludeEmail(userUpdate *models.User) error
|
||||
UpdateAvatar(userID uint, avatarPath string) error
|
||||
UpdateAvatar(userID uint, avatarPath string) error
|
||||
FindAll() ([]models.User, error)
|
||||
}
|
||||
|
||||
func (r *userRepository) UpdateAvatar(userID uint, avatarPath string) error {
|
||||
result := r.db.Model(&models.User{}).Where("id = ?", userID).Update("avatar", avatarPath)
|
||||
if result.Error != nil {
|
||||
return result.Error
|
||||
}
|
||||
if result.RowsAffected == 0 {
|
||||
return fmt.Errorf("user not found")
|
||||
}
|
||||
return nil
|
||||
result := r.db.Model(&models.User{}).Where("id = ?", userID).Update("avatar", avatarPath)
|
||||
if result.Error != nil {
|
||||
return result.Error
|
||||
}
|
||||
if result.RowsAffected == 0 {
|
||||
return fmt.Errorf("user not found")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
type userRepository struct {
|
||||
@@ -36,6 +37,13 @@ func NewUserRepository(db *gorm.DB) UserRepository {
|
||||
return &userRepository{db: db}
|
||||
}
|
||||
|
||||
// Add to userRepository implementation
|
||||
func (r *userRepository) FindAll() ([]models.User, error) {
|
||||
var users []models.User
|
||||
err := r.db.Find(&users).Error
|
||||
return users, err
|
||||
}
|
||||
|
||||
func (r *userRepository) Create(user *models.User) error {
|
||||
return r.db.Create(user).Error
|
||||
}
|
||||
|
||||
@@ -13,6 +13,7 @@ import (
|
||||
type UserService interface {
|
||||
GetUserProfile(userID uint) (*models.User, error)
|
||||
UpdateProfile(user *models.User) error
|
||||
GetAllUsers() ([]models.User, error)
|
||||
}
|
||||
|
||||
type userService struct {
|
||||
@@ -37,6 +38,23 @@ func NewUserService(userRepo repository.UserRepository, jwtService JWTService, l
|
||||
}
|
||||
}
|
||||
|
||||
func (s *userService) GetAllUsers() ([]models.User, error) {
|
||||
s.logger.Info("Fetching all users")
|
||||
|
||||
users, err := s.userRepo.FindAll()
|
||||
if err != nil {
|
||||
s.logger.Error("Failed to fetch users",
|
||||
zap.Error(err),
|
||||
)
|
||||
return nil, fmt.Errorf("failed to get users: %w", err)
|
||||
}
|
||||
|
||||
s.logger.Debug("Successfully fetched users",
|
||||
zap.Int("count", len(users)),
|
||||
)
|
||||
return users, nil
|
||||
}
|
||||
|
||||
func (s *authService) UpdateProfile(user *models.User) error {
|
||||
s.logger.Info("Updating user profile",
|
||||
zap.Uint("user_id", user.ID),
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user