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