156 lines
3.2 KiB
Go
156 lines
3.2 KiB
Go
|
|
/**
|
|||
|
|
* 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)
|
|||
|
|
}
|
|||
|
|
|