package handler import ( "strconv" "with_you/internal/dto" "with_you/internal/model" "with_you/internal/pkg/response" "with_you/internal/service" "github.com/gin-gonic/gin" ) // AdminUserHandler 管理端用户处理器 type AdminUserHandler struct { adminUserService service.AdminUserService } // NewAdminUserHandler 创建管理端用户处理器 func NewAdminUserHandler(adminUserService service.AdminUserService) *AdminUserHandler { return &AdminUserHandler{ adminUserService: adminUserService, } } // GetUserList 获取用户列表 // GET /api/v1/admin/users func (h *AdminUserHandler) GetUserList(c *gin.Context) { // 解析分页参数 page, _ := strconv.Atoi(c.DefaultQuery("page", "1")) pageSize, _ := strconv.Atoi(c.DefaultQuery("page_size", "20")) if page <= 0 { page = 1 } if pageSize <= 0 || pageSize > 100 { pageSize = 20 } // 获取筛选参数 keyword := c.Query("keyword") status := c.Query("status") // 验证状态参数 if status != "" && status != string(model.UserStatusActive) && status != string(model.UserStatusBanned) { response.BadRequest(c, "invalid status value") return } users, total, err := h.adminUserService.GetUserList(c.Request.Context(), page, pageSize, keyword, status) if err != nil { response.InternalServerError(c, "failed to get user list") return } response.Paginated(c, users, total, page, pageSize) } // GetUserDetail 获取用户详情 // GET /api/v1/admin/users/:id func (h *AdminUserHandler) GetUserDetail(c *gin.Context) { userID := c.Param("id") if userID == "" { response.BadRequest(c, "user id is required") return } userDetail, err := h.adminUserService.GetUserDetail(c.Request.Context(), userID) if err != nil { response.NotFound(c, "user not found") return } response.Success(c, userDetail) } // UpdateUserStatus 更新用户状态 // PUT /api/v1/admin/users/:id/status func (h *AdminUserHandler) UpdateUserStatus(c *gin.Context) { userID := c.Param("id") if userID == "" { response.BadRequest(c, "user id is required") return } var req dto.AdminUpdateUserStatusRequest if err := c.ShouldBindJSON(&req); err != nil { response.BadRequest(c, "invalid request body: "+err.Error()) return } // 验证状态值 if req.Status != string(model.UserStatusActive) && req.Status != string(model.UserStatusBanned) { response.BadRequest(c, "invalid status value, must be 'active' or 'banned'") return } userDetail, err := h.adminUserService.UpdateUserStatus(c.Request.Context(), userID, model.UserStatus(req.Status)) if err != nil { response.HandleError(c, err, "failed to update user status") return } response.Success(c, userDetail) }