package handler import ( "strconv" "affiliate_dash/internal/middleware" "affiliate_dash/internal/pkg/response" "affiliate_dash/internal/service" "github.com/gin-gonic/gin" ) type UserHandler struct { svc *service.UserService } func NewUserHandler(svc *service.UserService) *UserHandler { return &UserHandler{svc: svc} } func (h *UserHandler) List(c *gin.Context) { page, _ := strconv.Atoi(c.DefaultQuery("page", "1")) size, _ := strconv.Atoi(c.DefaultQuery("size", "20")) q := service.UserListQuery{ MerchantID: middleware.GetMerchantID(c), Page: page, Size: size, Keyword: c.Query("keyword"), Role: c.Query("role"), } if s := c.Query("status"); s != "" { v, _ := strconv.Atoi(s) q.Status = &v } list, total, err := h.svc.List(q) if err != nil { response.ServerError(c, err.Error()) return } response.Page(c, list, total, page, size) } type createUserReq struct { Username string `json:"username" binding:"required"` Password string `json:"password" binding:"required,min=6"` Nickname string `json:"nickname"` Role string `json:"role"` ParentID *uint `json:"parent_id"` } func (h *UserHandler) Create(c *gin.Context) { var req createUserReq if err := c.ShouldBindJSON(&req); err != nil { response.BadRequest(c, "参数错误") return } user, err := h.svc.Create(req.Username, req.Password, req.Nickname, req.Role, req.ParentID, middleware.GetMerchantID(c)) if err != nil { response.BadRequest(c, err.Error()) return } response.OK(c, user) } type userStatusReq struct { Status int `json:"status"` } func (h *UserHandler) UpdateStatus(c *gin.Context) { id, _ := strconv.ParseUint(c.Param("id"), 10, 64) var req userStatusReq if err := c.ShouldBindJSON(&req); err != nil { response.BadRequest(c, "参数错误") return } if err := h.svc.UpdateStatus(uint(id), req.Status); err != nil { response.BadRequest(c, err.Error()) return } response.OK(c, nil) }