duidui_fiber/internal/admin_auth/handler/admin_user_handler.go
2026-03-27 10:34:03 +08:00

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": "设置用户角色成功",
})
}