package handler import ( "strconv" "affiliate_dash/internal/middleware" "affiliate_dash/internal/model" "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{ Page: page, Size: size, Keyword: c.Query("keyword"), Role: c.Query("role"), } if middleware.GetRole(c) != model.RoleAdmin { q.MerchantID = middleware.GetMerchantID(c) } 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) } func (h *UserHandler) ListMerchantMembers(c *gin.Context) { page, _ := strconv.Atoi(c.DefaultQuery("page", "1")) size, _ := strconv.Atoi(c.DefaultQuery("size", "20")) list, total, err := h.svc.ListMerchantMembers(page, size) 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"` } 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, 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) } type userRoleReq struct { Role string `json:"role" binding:"required"` } func (h *UserHandler) UpdateRole(c *gin.Context) { id, _ := strconv.ParseUint(c.Param("id"), 10, 64) var req userRoleReq if err := c.ShouldBindJSON(&req); err != nil { response.BadRequest(c, "参数错误:角色必填") return } if err := h.svc.UpdateRole(uint(id), req.Role, middleware.GetUserID(c)); err != nil { response.BadRequest(c, err.Error()) return } response.OK(c, nil) } func (h *UserHandler) Delete(c *gin.Context) { id, _ := strconv.ParseUint(c.Param("id"), 10, 64) if err := h.svc.Delete(uint(id), middleware.GetUserID(c)); err != nil { response.BadRequest(c, err.Error()) return } response.OK(c, nil) }