289 lines
7.1 KiB
Go
289 lines
7.1 KiB
Go
package handler
|
|
|
|
import (
|
|
"dd_fiber_api/internal/admin_auth"
|
|
"dd_fiber_api/internal/admin_auth/service"
|
|
"strconv"
|
|
|
|
"github.com/gofiber/fiber/v2"
|
|
)
|
|
|
|
// AdminUserHandler 管理员用户处理器
|
|
type AdminUserHandler struct {
|
|
service *service.AdminUserService
|
|
}
|
|
|
|
// NewAdminUserHandler 创建管理员用户处理器
|
|
func NewAdminUserHandler(adminUserService *service.AdminUserService) *AdminUserHandler {
|
|
return &AdminUserHandler{
|
|
service: adminUserService,
|
|
}
|
|
}
|
|
|
|
// ListAdminUsers 列出管理员用户
|
|
func (h *AdminUserHandler) ListAdminUsers(c *fiber.Ctx) error {
|
|
keyword := c.Query("keyword", "")
|
|
page, _ := strconv.Atoi(c.Query("page", "1"))
|
|
pageSize, _ := strconv.Atoi(c.Query("page_size", "10"))
|
|
|
|
users, total, err := h.service.ListAdminUsers(keyword, page, pageSize)
|
|
if err != nil {
|
|
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
|
|
"success": false,
|
|
"message": "获取管理员列表失败: " + err.Error(),
|
|
})
|
|
}
|
|
|
|
return c.Status(fiber.StatusOK).JSON(fiber.Map{
|
|
"success": true,
|
|
"message": "获取管理员列表成功",
|
|
"data": fiber.Map{
|
|
"list": users,
|
|
"total": total,
|
|
"page": page,
|
|
"page_size": pageSize,
|
|
},
|
|
})
|
|
}
|
|
|
|
// GetAdminUser 获取管理员用户详情
|
|
func (h *AdminUserHandler) GetAdminUser(c *fiber.Ctx) error {
|
|
id := c.Query("id", "")
|
|
if id == "" {
|
|
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
|
|
"success": false,
|
|
"message": "管理员ID不能为空",
|
|
})
|
|
}
|
|
|
|
user, err := h.service.GetAdminUser(id)
|
|
if err != nil {
|
|
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
|
|
"success": false,
|
|
"message": "获取管理员详情失败: " + err.Error(),
|
|
})
|
|
}
|
|
|
|
if user == nil {
|
|
return c.Status(fiber.StatusNotFound).JSON(fiber.Map{
|
|
"success": false,
|
|
"message": "管理员不存在",
|
|
})
|
|
}
|
|
|
|
// 不返回密码
|
|
user.Password = ""
|
|
|
|
return c.Status(fiber.StatusOK).JSON(fiber.Map{
|
|
"success": true,
|
|
"message": "获取管理员详情成功",
|
|
"data": user,
|
|
})
|
|
}
|
|
|
|
// CreateAdminUser 创建管理员用户
|
|
func (h *AdminUserHandler) CreateAdminUser(c *fiber.Ctx) error {
|
|
var req struct {
|
|
Username string `json:"username"`
|
|
Phone string `json:"phone"`
|
|
Password string `json:"password"`
|
|
Nickname string `json:"nickname"`
|
|
Avatar string `json:"avatar"`
|
|
Status int `json:"status"`
|
|
IsSuperAdmin int `json:"is_super_admin"`
|
|
}
|
|
|
|
if err := c.BodyParser(&req); err != nil {
|
|
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
|
|
"success": false,
|
|
"message": "请求参数解析失败: " + err.Error(),
|
|
})
|
|
}
|
|
|
|
// 验证必填字段
|
|
if req.Username == "" && req.Phone == "" {
|
|
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
|
|
"success": false,
|
|
"message": "用户名或手机号至少填写一个",
|
|
})
|
|
}
|
|
|
|
if req.Password == "" {
|
|
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
|
|
"success": false,
|
|
"message": "密码不能为空",
|
|
})
|
|
}
|
|
|
|
user := &admin_auth.AdminUser{
|
|
Username: req.Username,
|
|
Phone: req.Phone,
|
|
Nickname: req.Nickname,
|
|
Avatar: req.Avatar,
|
|
Status: req.Status,
|
|
IsSuperAdmin: req.IsSuperAdmin,
|
|
}
|
|
|
|
if err := h.service.CreateAdminUser(user, req.Password); err != nil {
|
|
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
|
|
"success": false,
|
|
"message": "创建管理员失败: " + err.Error(),
|
|
})
|
|
}
|
|
|
|
// 不返回密码
|
|
user.Password = ""
|
|
|
|
return c.Status(fiber.StatusOK).JSON(fiber.Map{
|
|
"success": true,
|
|
"message": "创建管理员成功",
|
|
"data": user,
|
|
})
|
|
}
|
|
|
|
// UpdateAdminUser 更新管理员用户
|
|
func (h *AdminUserHandler) UpdateAdminUser(c *fiber.Ctx) error {
|
|
var req struct {
|
|
ID string `json:"id"`
|
|
Username string `json:"username"`
|
|
Phone string `json:"phone"`
|
|
Password string `json:"password"` // 可选,如果为空则不更新密码
|
|
Nickname string `json:"nickname"`
|
|
Avatar string `json:"avatar"`
|
|
Status int `json:"status"`
|
|
IsSuperAdmin int `json:"is_super_admin"`
|
|
}
|
|
|
|
if err := c.BodyParser(&req); err != nil {
|
|
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
|
|
"success": false,
|
|
"message": "请求参数解析失败: " + err.Error(),
|
|
})
|
|
}
|
|
|
|
if req.ID == "" {
|
|
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
|
|
"success": false,
|
|
"message": "管理员ID不能为空",
|
|
})
|
|
}
|
|
|
|
user := &admin_auth.AdminUser{
|
|
ID: req.ID,
|
|
Username: req.Username,
|
|
Phone: req.Phone,
|
|
Nickname: req.Nickname,
|
|
Avatar: req.Avatar,
|
|
Status: req.Status,
|
|
IsSuperAdmin: req.IsSuperAdmin,
|
|
}
|
|
|
|
if err := h.service.UpdateAdminUser(user, req.Password); err != nil {
|
|
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
|
|
"success": false,
|
|
"message": "更新管理员失败: " + err.Error(),
|
|
})
|
|
}
|
|
|
|
// 不返回密码
|
|
user.Password = ""
|
|
|
|
return c.Status(fiber.StatusOK).JSON(fiber.Map{
|
|
"success": true,
|
|
"message": "更新管理员成功",
|
|
"data": user,
|
|
})
|
|
}
|
|
|
|
// DeleteAdminUser 删除管理员用户
|
|
func (h *AdminUserHandler) DeleteAdminUser(c *fiber.Ctx) error {
|
|
// 支持从 Query 或 Body 中获取 id
|
|
id := c.Query("id", "")
|
|
if id == "" {
|
|
var req struct {
|
|
ID string `json:"id"`
|
|
}
|
|
if err := c.BodyParser(&req); err == nil {
|
|
id = req.ID
|
|
}
|
|
}
|
|
|
|
if id == "" {
|
|
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
|
|
"success": false,
|
|
"message": "管理员ID不能为空",
|
|
})
|
|
}
|
|
|
|
if err := h.service.DeleteAdminUser(id); err != nil {
|
|
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
|
|
"success": false,
|
|
"message": "删除管理员失败: " + err.Error(),
|
|
})
|
|
}
|
|
|
|
return c.Status(fiber.StatusOK).JSON(fiber.Map{
|
|
"success": true,
|
|
"message": "删除管理员成功",
|
|
})
|
|
}
|
|
|
|
// GetUserRoles 获取用户的角色列表
|
|
func (h *AdminUserHandler) GetUserRoles(c *fiber.Ctx) error {
|
|
userID := c.Query("user_id", "")
|
|
if userID == "" {
|
|
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
|
|
"success": false,
|
|
"message": "用户ID不能为空",
|
|
})
|
|
}
|
|
|
|
roleIDs, err := h.service.GetUserRoles(userID)
|
|
if err != nil {
|
|
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
|
|
"success": false,
|
|
"message": "获取用户角色失败: " + err.Error(),
|
|
})
|
|
}
|
|
|
|
return c.Status(fiber.StatusOK).JSON(fiber.Map{
|
|
"success": true,
|
|
"message": "获取用户角色成功",
|
|
"data": roleIDs,
|
|
})
|
|
}
|
|
|
|
// SetUserRoles 设置用户的角色
|
|
func (h *AdminUserHandler) SetUserRoles(c *fiber.Ctx) error {
|
|
var req struct {
|
|
UserID string `json:"user_id"`
|
|
RoleIDs []string `json:"role_ids"`
|
|
}
|
|
|
|
if err := c.BodyParser(&req); err != nil {
|
|
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
|
|
"success": false,
|
|
"message": "请求参数解析失败: " + err.Error(),
|
|
})
|
|
}
|
|
|
|
if req.UserID == "" {
|
|
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
|
|
"success": false,
|
|
"message": "用户ID不能为空",
|
|
})
|
|
}
|
|
|
|
if err := h.service.SetUserRoles(req.UserID, req.RoleIDs); err != nil {
|
|
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
|
|
"success": false,
|
|
"message": "设置用户角色失败: " + err.Error(),
|
|
})
|
|
}
|
|
|
|
return c.Status(fiber.StatusOK).JSON(fiber.Map{
|
|
"success": true,
|
|
"message": "设置用户角色成功",
|
|
})
|
|
}
|