BUG修复,返回结构统一
This commit is contained in:
@@ -2,128 +2,132 @@ package handlers
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/niangaodev/art-code/models"
|
||||
"github.com/niangaodev/art-code/repositories"
|
||||
"golang.org/x/crypto/bcrypt"
|
||||
"github.com/niangaodev/art-code/utils"
|
||||
)
|
||||
|
||||
// GetUsers 获取所有用户
|
||||
// AdminGetUsers 获取用户列表
|
||||
func AdminGetUsers(c *gin.Context) {
|
||||
users, err := repositories.GetUsers()
|
||||
page, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
|
||||
pageSize, _ := strconv.Atoi(c.DefaultQuery("pageSize", "10"))
|
||||
|
||||
users, total, err := repositories.GetUsers(page, pageSize)
|
||||
if err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to get users"})
|
||||
utils.ServerError(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, repositories.BuildUsersResponse(users))
|
||||
list := repositories.BuildUsersResponse(users)
|
||||
res := gin.H{
|
||||
"list": list,
|
||||
"total": total,
|
||||
"page": page,
|
||||
"size": pageSize,
|
||||
}
|
||||
if list == nil {
|
||||
res["list"] = []interface{}{}
|
||||
}
|
||||
|
||||
utils.Success(c, res)
|
||||
}
|
||||
|
||||
// GetUser 获取单个用户
|
||||
func AdminGetUser(c *gin.Context) {
|
||||
idStr := c.Param("id")
|
||||
id, err := strconv.ParseUint(idStr, 10, 32)
|
||||
if err != nil {
|
||||
c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid user ID"})
|
||||
return
|
||||
}
|
||||
|
||||
user, err := repositories.GetUserByID(uint(id))
|
||||
if err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to get user"})
|
||||
return
|
||||
}
|
||||
|
||||
if user == nil {
|
||||
c.JSON(http.StatusNotFound, gin.H{"error": "User not found"})
|
||||
return
|
||||
}
|
||||
|
||||
// 构建响应
|
||||
response := repositories.BuildUserResponse(user)
|
||||
|
||||
// 设置响应头
|
||||
c.Header("Content-Type", "application/json; charset=utf-8")
|
||||
|
||||
// 返回JSON响应
|
||||
c.JSON(http.StatusOK, response)
|
||||
}
|
||||
|
||||
// CreateUser 创建用户
|
||||
// AdminCreateUser 创建用户
|
||||
func AdminCreateUser(c *gin.Context) {
|
||||
var user models.User
|
||||
if err := c.ShouldBindJSON(&user); err != nil {
|
||||
c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid request"})
|
||||
utils.Error(c, 400, "Invalid request")
|
||||
return
|
||||
}
|
||||
|
||||
// 设置默认密码并使用bcrypt哈希
|
||||
defaultPassword := "admin123"
|
||||
hashedPassword, err := bcrypt.GenerateFromPassword([]byte(defaultPassword), bcrypt.DefaultCost)
|
||||
// 密码加密
|
||||
hashedPassword, err := utils.HashPassword(user.Password)
|
||||
if err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to hash password"})
|
||||
utils.ServerError(c, err)
|
||||
return
|
||||
}
|
||||
user.PasswordHash = string(hashedPassword)
|
||||
user.Password = hashedPassword
|
||||
|
||||
// 创建用户
|
||||
if err := repositories.CreateUser(&user); err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to create user"})
|
||||
utils.ServerError(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, gin.H{"message": "User created successfully"})
|
||||
utils.SuccessWithMsg(c, "User created successfully", gin.H{"id": user.ID})
|
||||
}
|
||||
|
||||
// UpdateUser 更新用户
|
||||
// AdminUpdateUser 更新用户
|
||||
func AdminUpdateUser(c *gin.Context) {
|
||||
userID := c.Param("id")
|
||||
idStr := c.Param("id")
|
||||
var id uint
|
||||
if _, err := fmt.Sscanf(idStr, "%d", &id); err != nil {
|
||||
utils.Error(c, 400, "Invalid user ID")
|
||||
return
|
||||
}
|
||||
|
||||
var user models.User
|
||||
if err := c.ShouldBindJSON(&user); err != nil {
|
||||
c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid request"})
|
||||
utils.Error(c, 400, "Invalid request")
|
||||
return
|
||||
}
|
||||
user.ID = id
|
||||
|
||||
// 转换用户ID为uint
|
||||
var idUint uint
|
||||
_, err := fmt.Sscanf(userID, "%d", &idUint)
|
||||
if err != nil {
|
||||
c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid user ID"})
|
||||
return
|
||||
// 如果提供了密码,则加密
|
||||
if user.Password != "" {
|
||||
hashedPassword, err := utils.HashPassword(user.Password)
|
||||
if err != nil {
|
||||
utils.ServerError(c, err)
|
||||
return
|
||||
}
|
||||
user.Password = hashedPassword
|
||||
}
|
||||
|
||||
// 设置用户ID
|
||||
user.ID = idUint
|
||||
|
||||
// 更新用户
|
||||
if err := repositories.UpdateUser(&user); err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to update user"})
|
||||
utils.ServerError(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, gin.H{"message": "User updated successfully"})
|
||||
utils.SuccessWithMsg(c, "User updated successfully", nil)
|
||||
}
|
||||
|
||||
// DeleteUser 删除用户
|
||||
// AdminDeleteUser 删除用户
|
||||
func AdminDeleteUser(c *gin.Context) {
|
||||
userID := c.Param("id")
|
||||
|
||||
// 转换用户ID为uint
|
||||
var idUint uint
|
||||
_, err := fmt.Sscanf(userID, "%d", &idUint)
|
||||
if err != nil {
|
||||
c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid user ID"})
|
||||
idStr := c.Param("id")
|
||||
var id uint
|
||||
if _, err := fmt.Sscanf(idStr, "%d", &id); err != nil {
|
||||
utils.Error(c, 400, "Invalid user ID")
|
||||
return
|
||||
}
|
||||
|
||||
// 删除用户
|
||||
if err := repositories.DeleteUser(idUint); err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to delete user"})
|
||||
if err := repositories.DeleteUser(id); err != nil {
|
||||
utils.ServerError(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, gin.H{"message": "User deleted successfully"})
|
||||
utils.SuccessWithMsg(c, "User deleted successfully", nil)
|
||||
}
|
||||
|
||||
// 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
|
||||
}
|
||||
|
||||
user, err := repositories.GetUserByID(id)
|
||||
if err != nil {
|
||||
utils.ServerError(c, err)
|
||||
return
|
||||
}
|
||||
if user == nil {
|
||||
utils.Error(c, 404, "User not found")
|
||||
return
|
||||
}
|
||||
|
||||
utils.Success(c, repositories.BuildUserResponse(user))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user