package handler import ( "dd_fiber_api/internal/admin_auth" "dd_fiber_api/internal/admin_auth/service" "strconv" "github.com/gofiber/fiber/v2" ) // RoleHandler 角色处理器 type RoleHandler struct { service *service.RoleService } // NewRoleHandler 创建角色处理器 func NewRoleHandler(roleService *service.RoleService) *RoleHandler { return &RoleHandler{ service: roleService, } } // ListRoles 列出角色 func (h *RoleHandler) ListRoles(c *fiber.Ctx) error { keyword := c.Query("keyword", "") page, _ := strconv.Atoi(c.Query("page", "1")) pageSize, _ := strconv.Atoi(c.Query("page_size", "10")) roles, total, err := h.service.ListRoles(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": roles, "total": total, "page": page, "page_size": pageSize, }, }) } // GetRole 获取角色详情 func (h *RoleHandler) GetRole(c *fiber.Ctx) error { id := c.Query("id", "") if id == "" { return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ "success": false, "message": "角色ID不能为空", }) } role, err := h.service.GetRole(id) if err != nil { return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{ "success": false, "message": "获取角色详情失败: " + err.Error(), }) } if role == nil { return c.Status(fiber.StatusNotFound).JSON(fiber.Map{ "success": false, "message": "角色不存在", }) } return c.Status(fiber.StatusOK).JSON(fiber.Map{ "success": true, "message": "获取角色详情成功", "data": role, }) } // CreateRole 创建角色 func (h *RoleHandler) CreateRole(c *fiber.Ctx) error { var req struct { Name string `json:"name"` Code string `json:"code"` // 可选,如果为空则由后端自动生成 Description string `json:"description"` Status int `json:"status"` } if err := c.BodyParser(&req); err != nil { return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ "success": false, "message": "请求参数解析失败: " + err.Error(), }) } if req.Name == "" { return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ "success": false, "message": "角色名称不能为空", }) } role := &admin_auth.AdminRole{ Name: req.Name, Code: req.Code, // 如果为空,service 层会自动生成 Description: req.Description, Status: req.Status, } if err := h.service.CreateRole(role); 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": role, }) } // UpdateRole 更新角色 func (h *RoleHandler) UpdateRole(c *fiber.Ctx) error { var req struct { ID string `json:"id"` Name string `json:"name"` Code string `json:"code"` Description string `json:"description"` Status int `json:"status"` } 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不能为空", }) } role := &admin_auth.AdminRole{ ID: req.ID, Name: req.Name, Code: req.Code, Description: req.Description, Status: req.Status, } if err := h.service.UpdateRole(role); 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": role, }) } // DeleteRole 删除角色 func (h *RoleHandler) DeleteRole(c *fiber.Ctx) error { 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.DeleteRole(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": "删除角色成功", }) } // GetRolePermissions 获取角色的权限列表 func (h *RoleHandler) GetRolePermissions(c *fiber.Ctx) error { roleID := c.Query("role_id", "") if roleID == "" { return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ "success": false, "message": "角色ID不能为空", }) } permissionIDs, err := h.service.GetRolePermissions(roleID) 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": permissionIDs, }) } // SetRolePermissions 设置角色的权限 func (h *RoleHandler) SetRolePermissions(c *fiber.Ctx) error { var req struct { RoleID string `json:"role_id"` PermissionIDs []string `json:"permission_ids"` } if err := c.BodyParser(&req); err != nil { return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ "success": false, "message": "请求参数解析失败: " + err.Error(), }) } if req.RoleID == "" { return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ "success": false, "message": "角色ID不能为空", }) } if err := h.service.SetRolePermissions(req.RoleID, req.PermissionIDs); 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": "设置角色权限成功", }) }