package admin import ( "strconv" "github.com/break/junhong_cmp_fiber/pkg/errors" "github.com/break/junhong_cmp_fiber/pkg/response" "github.com/gofiber/fiber/v2" "github.com/break/junhong_cmp_fiber/internal/model" accountService "github.com/break/junhong_cmp_fiber/internal/service/account" ) // AccountHandler 账号 Handler type AccountHandler struct { service *accountService.Service } // NewAccountHandler 创建账号 Handler func NewAccountHandler(service *accountService.Service) *AccountHandler { return &AccountHandler{service: service} } // Create 创建账号 // POST /api/v1/accounts func (h *AccountHandler) Create(c *fiber.Ctx) error { var req model.CreateAccountRequest if err := c.BodyParser(&req); err != nil { return errors.New(errors.CodeInvalidParam, "请求参数解析失败") } account, err := h.service.Create(c.UserContext(), &req) if err != nil { return err } return response.Success(c, account) } // Get 获取账号详情 // GET /api/v1/accounts/:id func (h *AccountHandler) Get(c *fiber.Ctx) error { id, err := strconv.ParseUint(c.Params("id"), 10, 64) if err != nil { return errors.New(errors.CodeInvalidParam, "无效的账号 ID") } account, err := h.service.Get(c.UserContext(), uint(id)) if err != nil { return err } return response.Success(c, account) } // Update 更新账号 // PUT /api/v1/accounts/:id func (h *AccountHandler) Update(c *fiber.Ctx) error { id, err := strconv.ParseUint(c.Params("id"), 10, 64) if err != nil { return errors.New(errors.CodeInvalidParam, "无效的账号 ID") } var req model.UpdateAccountRequest if err := c.BodyParser(&req); err != nil { return errors.New(errors.CodeInvalidParam, "请求参数解析失败") } account, err := h.service.Update(c.UserContext(), uint(id), &req) if err != nil { return err } return response.Success(c, account) } // Delete 删除账号 // DELETE /api/v1/accounts/:id func (h *AccountHandler) Delete(c *fiber.Ctx) error { id, err := strconv.ParseUint(c.Params("id"), 10, 64) if err != nil { return errors.New(errors.CodeInvalidParam, "无效的账号 ID") } if err := h.service.Delete(c.UserContext(), uint(id)); err != nil { return err } return response.Success(c, nil) } // List 查询账号列表 // GET /api/v1/accounts func (h *AccountHandler) List(c *fiber.Ctx) error { var req model.AccountListRequest if err := c.QueryParser(&req); err != nil { return errors.New(errors.CodeInvalidParam, "请求参数解析失败") } accounts, total, err := h.service.List(c.UserContext(), &req) if err != nil { return err } return response.SuccessWithPagination(c, accounts, total, req.Page, req.PageSize) } // AssignRoles 为账号分配角色 // POST /api/v1/accounts/:id/roles func (h *AccountHandler) AssignRoles(c *fiber.Ctx) error { id, err := strconv.ParseUint(c.Params("id"), 10, 64) if err != nil { return errors.New(errors.CodeInvalidParam, "无效的账号 ID") } var req model.AssignRolesRequest if err := c.BodyParser(&req); err != nil { return errors.New(errors.CodeInvalidParam, "请求参数解析失败") } ars, err := h.service.AssignRoles(c.UserContext(), uint(id), req.RoleIDs) if err != nil { return err } return response.Success(c, ars) } // GetRoles 获取账号的所有角色 // GET /api/v1/accounts/:id/roles func (h *AccountHandler) GetRoles(c *fiber.Ctx) error { id, err := strconv.ParseUint(c.Params("id"), 10, 64) if err != nil { return errors.New(errors.CodeInvalidParam, "无效的账号 ID") } roles, err := h.service.GetRoles(c.UserContext(), uint(id)) if err != nil { return err } return response.Success(c, roles) } // RemoveRole 移除账号的角色 // DELETE /api/v1/accounts/:account_id/roles/:role_id func (h *AccountHandler) RemoveRole(c *fiber.Ctx) error { accountID, err := strconv.ParseUint(c.Params("account_id"), 10, 64) if err != nil { return errors.New(errors.CodeInvalidParam, "无效的账号 ID") } roleID, err := strconv.ParseUint(c.Params("role_id"), 10, 64) if err != nil { return errors.New(errors.CodeInvalidParam, "无效的角色 ID") } if err := h.service.RemoveRole(c.UserContext(), uint(accountID), uint(roleID)); err != nil { return err } return response.Success(c, nil) }