Files
backend/internal/handler/admin_user_handler.go

106 lines
2.6 KiB
Go
Raw Normal View History

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)
}