/** * package api * 作用:用户管理相关API处理器 */ package api import ( "fmt" "math/rand" "strconv" "time" "xk-websocket-v2/internal/model" "xk-websocket-v2/internal/service" "xk-websocket-v2/internal/utils" "github.com/gin-gonic/gin" ) /** * GetMyInfoHandler * 功能:获取当前用户信息 * 路径:GET /api/user/my-info * 需要:JWT认证 */ func GetMyInfoHandler(c *gin.Context) { // 从Context获取用户ID(由JWT中间件注入) userID, exists := c.Get("user_id") if !exists { utils.Unauthorized(c, "未认证") return } user, err := service.UserSvc.GetUserByID(userID.(string)) if err != nil { utils.NotFound(c, "用户不存在") return } utils.SuccessWithData(c, user, "获取成功") } /** * GetUserListHandler * 功能:获取用户列表 * 路径:GET /api/user/list */ func GetUserListHandler(c *gin.Context) { page, _ := strconv.Atoi(c.DefaultQuery("page", "1")) pageSize, _ := strconv.Atoi(c.DefaultQuery("page_size", "20")) if page < 1 { page = 1 } if pageSize < 1 || pageSize > 100 { pageSize = 20 } users, total, err := service.UserSvc.GetUserList(page, pageSize) if err != nil { utils.InternalError(c, "查询失败") return } // 确保返回空数组而不是null if users == nil { users = []model.User{} } utils.SuccessWithData(c, gin.H{ "data": users, "total": total, "page": page, "size": pageSize, }, "获取成功") } /** * CreateUserHandler * 功能:创建用户(管理员) * 路径:POST /api/user/create */ func CreateUserHandler(c *gin.Context) { var user model.User if err := c.ShouldBindJSON(&user); err != nil { utils.BadRequest(c, "参数错误: "+err.Error()) return } // 生成用户ID user.ID = generateUserID() if err := service.UserSvc.CreateUser(&user); err != nil { utils.BadRequest(c, "创建用户失败: "+err.Error()) return } user.Password = "" // 清除密码 utils.SuccessWithData(c, user, "创建成功") } /** * UpdateUserHandler * 功能:更新用户信息 * 路径:POST /api/user/update */ func UpdateUserHandler(c *gin.Context) { var req struct { ID string `json:"id" binding:"required"` Updates map[string]interface{} `json:"updates" binding:"required"` } if err := c.ShouldBindJSON(&req); err != nil { utils.BadRequest(c, "参数错误: "+err.Error()) return } if err := service.UserSvc.UpdateUser(req.ID, req.Updates); err != nil { utils.BadRequest(c, "更新失败: "+err.Error()) return } utils.Success(c, "更新成功") } /** * DeleteUserHandler * 功能:删除用户 * 路径:POST /api/user/delete */ func DeleteUserHandler(c *gin.Context) { var req struct { ID string `json:"id" binding:"required"` } if err := c.ShouldBindJSON(&req); err != nil { utils.BadRequest(c, "参数错误") return } if err := service.UserSvc.DeleteUser(req.ID); err != nil { utils.BadRequest(c, "删除失败: "+err.Error()) return } utils.Success(c, "删除成功") } // 辅助函数:生成用户ID func generateUserID() string { // 使用时间戳+随机数生成用户ID timestamp := time.Now().UnixNano() random := rand.Intn(1000000) return fmt.Sprintf("user_%d_%d", timestamp, random) }