Files
nl-blogs/server/handlers/user.go

134 lines
2.8 KiB
Go
Raw Normal View History

2026-01-15 13:51:44 +08:00
package handlers
import (
"fmt"
"strconv"
"github.com/gin-gonic/gin"
"github.com/niangaodev/art-code/models"
"github.com/niangaodev/art-code/repositories"
2026-01-16 17:03:34 +08:00
"github.com/niangaodev/art-code/utils"
2026-01-15 13:51:44 +08:00
)
2026-01-16 17:03:34 +08:00
// AdminGetUsers 获取用户列表
2026-01-15 13:51:44 +08:00
func AdminGetUsers(c *gin.Context) {
2026-01-16 17:03:34 +08:00
page, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
pageSize, _ := strconv.Atoi(c.DefaultQuery("pageSize", "10"))
2026-01-15 13:51:44 +08:00
2026-01-16 17:03:34 +08:00
users, total, err := repositories.GetUsers(page, pageSize)
2026-01-15 13:51:44 +08:00
if err != nil {
2026-01-16 17:03:34 +08:00
utils.ServerError(c, err)
2026-01-15 13:51:44 +08:00
return
}
2026-01-16 17:03:34 +08:00
list := repositories.BuildUsersResponse(users)
res := gin.H{
"list": list,
"total": total,
"page": page,
"size": pageSize,
2026-01-15 13:51:44 +08:00
}
2026-01-16 17:03:34 +08:00
if list == nil {
res["list"] = []interface{}{}
2026-01-15 13:51:44 +08:00
}
2026-01-16 17:03:34 +08:00
utils.Success(c, res)
2026-01-15 13:51:44 +08:00
}
2026-01-16 17:03:34 +08:00
// AdminCreateUser 创建用户
2026-01-15 13:51:44 +08:00
func AdminCreateUser(c *gin.Context) {
var user models.User
if err := c.ShouldBindJSON(&user); err != nil {
2026-01-16 17:03:34 +08:00
utils.Error(c, 400, "Invalid request")
2026-01-15 13:51:44 +08:00
return
}
2026-01-16 17:03:34 +08:00
// 密码加密
hashedPassword, err := utils.HashPassword(user.Password)
2026-01-15 13:51:44 +08:00
if err != nil {
2026-01-16 17:03:34 +08:00
utils.ServerError(c, err)
2026-01-15 13:51:44 +08:00
return
}
2026-01-16 17:03:34 +08:00
user.Password = hashedPassword
2026-01-15 13:51:44 +08:00
if err := repositories.CreateUser(&user); err != nil {
2026-01-16 17:03:34 +08:00
utils.ServerError(c, err)
2026-01-15 13:51:44 +08:00
return
}
2026-01-16 17:03:34 +08:00
utils.SuccessWithMsg(c, "User created successfully", gin.H{"id": user.ID})
2026-01-15 13:51:44 +08:00
}
2026-01-16 17:03:34 +08:00
// AdminUpdateUser 更新用户
2026-01-15 13:51:44 +08:00
func AdminUpdateUser(c *gin.Context) {
2026-01-16 17:03:34 +08:00
idStr := c.Param("id")
var id uint
if _, err := fmt.Sscanf(idStr, "%d", &id); err != nil {
utils.Error(c, 400, "Invalid user ID")
return
}
2026-01-15 13:51:44 +08:00
var user models.User
if err := c.ShouldBindJSON(&user); err != nil {
2026-01-16 17:03:34 +08:00
utils.Error(c, 400, "Invalid request")
2026-01-15 13:51:44 +08:00
return
}
2026-01-16 17:03:34 +08:00
user.ID = id
// 如果提供了密码,则加密
if user.Password != "" {
hashedPassword, err := utils.HashPassword(user.Password)
if err != nil {
utils.ServerError(c, err)
return
}
user.Password = hashedPassword
}
2026-01-15 13:51:44 +08:00
2026-01-16 17:03:34 +08:00
if err := repositories.UpdateUser(&user); err != nil {
utils.ServerError(c, err)
2026-01-15 13:51:44 +08:00
return
}
2026-01-16 17:03:34 +08:00
utils.SuccessWithMsg(c, "User updated successfully", nil)
}
2026-01-15 13:51:44 +08:00
2026-01-16 17:03:34 +08:00
// AdminDeleteUser 删除用户
func AdminDeleteUser(c *gin.Context) {
idStr := c.Param("id")
var id uint
if _, err := fmt.Sscanf(idStr, "%d", &id); err != nil {
utils.Error(c, 400, "Invalid user ID")
2026-01-15 13:51:44 +08:00
return
}
2026-01-16 17:03:34 +08:00
if err := repositories.DeleteUser(id); err != nil {
utils.ServerError(c, err)
return
}
utils.SuccessWithMsg(c, "User deleted successfully", nil)
2026-01-15 13:51:44 +08:00
}
2026-01-16 17:03:34 +08:00
// AdminGetUser 获取单个用户
func AdminGetUser(c *gin.Context) {
idStr := c.Param("id")
var id uint
if _, err := fmt.Sscanf(idStr, "%d", &id); err != nil {
utils.Error(c, 400, "Invalid user ID")
return
}
2026-01-15 13:51:44 +08:00
2026-01-16 17:03:34 +08:00
user, err := repositories.GetUserByID(id)
2026-01-15 13:51:44 +08:00
if err != nil {
2026-01-16 17:03:34 +08:00
utils.ServerError(c, err)
2026-01-15 13:51:44 +08:00
return
}
2026-01-16 17:03:34 +08:00
if user == nil {
utils.Error(c, 404, "User not found")
2026-01-15 13:51:44 +08:00
return
}
2026-01-16 17:03:34 +08:00
utils.Success(c, repositories.BuildUserResponse(user))
2026-01-15 13:51:44 +08:00
}