// Package controller 控制器层 package controller import ( "strconv" "server/common" "server/modules/system/dto" "server/modules/system/service" "server/modules/system/vo" // 用于 Swagger 注解 "github.com/gin-gonic/gin" ) type SysUserController struct { service *service.SysUserService } func NewSysUserController() *SysUserController { return &SysUserController{service: service.NewSysUserService()} } // _ 确保 vo 包被导入(用于 Swagger 注解) var _ = vo.SysUserVO{} func (ctrl *SysUserController) RegisterRoutes(r *gin.RouterGroup) { r.GET("/sys-users", ctrl.List) r.GET("/sys-users/:id", ctrl.GetByID) r.POST("/sys-users", ctrl.Create) r.PUT("/sys-users/:id", ctrl.Update) r.PATCH("/sys-users/:id", ctrl.UpdateFields) r.DELETE("/sys-users/:id", ctrl.Delete) r.PUT("/sys-users/:id/password", ctrl.UpdatePassword) } // @Summary 获取用户列表 // @Tags 用户管理 // @Param page query int false "页码" // @Param size query int false "每页数量" // @Success 200 {object} common.Response{data=[]vo.SysUserVO} // @Router /sys-users [get] func (ctrl *SysUserController) List(c *gin.Context) { page, _ := strconv.Atoi(c.DefaultQuery("page", "1")) size, _ := strconv.Atoi(c.DefaultQuery("size", "10")) items, total, err := ctrl.service.ListUsers(page, size) if err != nil { common.Error(c, 500, err.Error()) return } common.SuccessPage(c, items, total, page, size) } // @Summary 获取单个用户 // @Tags 用户管理 // @Param id path string true "用户ID" // @Success 200 {object} common.Response{data=vo.SysUserVO} // @Router /sys-users/{id} [get] func (ctrl *SysUserController) GetByID(c *gin.Context) { item, err := ctrl.service.GetUserByID(c.Param("id")) if err != nil { common.Error(c, 404, "未找到") return } common.Success(c, item) } // @Summary 创建用户 // @Tags 用户管理 // @Param request body dto.CreateUserRequest true "用户信息" // @Success 200 {object} common.Response{data=vo.SysUserVO} // @Router /sys-users [post] func (ctrl *SysUserController) Create(c *gin.Context) { var req dto.CreateUserRequest if err := c.ShouldBindJSON(&req); err != nil { common.Error(c, 400, "参数错误: "+err.Error()) return } item, err := ctrl.service.CreateUser(&req, common.GetLoginUserID(c)) if err != nil { common.Error(c, 500, err.Error()) return } common.Success(c, item) } // @Summary 更新用户 // @Tags 用户管理 // @Param id path string true "用户ID" // @Param request body dto.UpdateUserRequest true "用户信息" // @Success 200 {object} common.Response{data=vo.SysUserVO} // @Router /sys-users/{id} [put] func (ctrl *SysUserController) Update(c *gin.Context) { var req dto.UpdateUserRequest if err := c.ShouldBindJSON(&req); err != nil { common.Error(c, 400, "参数错误: "+err.Error()) return } item, err := ctrl.service.UpdateUser(c.Param("id"), &req) if err != nil { common.Error(c, 500, err.Error()) return } common.Success(c, item) } // @Summary 动态字段更新 // @Tags 用户管理 // @Param id path string true "用户ID" // @Param fields body map[string]interface{} true "要更新的字段" // @Success 200 {object} common.Response // @Router /sys-users/{id} [patch] func (ctrl *SysUserController) UpdateFields(c *gin.Context) { var fields map[string]interface{} if err := c.ShouldBindJSON(&fields); err != nil { common.Error(c, 400, "参数错误") return } if err := ctrl.service.UpdateFields(c.Param("id"), fields); err != nil { common.Error(c, 500, err.Error()) return } common.Success(c, nil) } // @Summary 删除用户 // @Tags 用户管理 // @Param id path string true "用户ID" // @Success 200 {object} common.Response // @Router /sys-users/{id} [delete] func (ctrl *SysUserController) Delete(c *gin.Context) { if err := ctrl.service.Delete(c.Param("id")); err != nil { common.Error(c, 500, err.Error()) return } common.Success(c, nil) } // UpdatePasswordRequest 修改密码请求 type UpdatePasswordRequest struct { OldPassword string `json:"oldPassword" binding:"required"` NewPassword string `json:"newPassword" binding:"required"` } // @Summary 修改密码 // @Tags 用户管理 // @Param id path string true "用户ID" // @Param request body UpdatePasswordRequest true "密码信息" // @Success 200 {object} common.Response // @Router /sys-users/{id}/password [put] func (ctrl *SysUserController) UpdatePassword(c *gin.Context) { var req UpdatePasswordRequest if err := c.ShouldBindJSON(&req); err != nil { common.Error(c, 400, "参数错误") return } if err := ctrl.service.UpdatePassword(c.Param("id"), req.OldPassword, req.NewPassword); err != nil { common.Error(c, 400, err.Error()) return } common.Success(c, nil) }