package admin import ( "net/http" "server/internal/model/common" "server/internal/model/request" "server/internal/pkg/httputil" "server/internal/router" "server/internal/service/admin" "github.com/go-chi/chi/v5" ) type RoleHandler struct { roleService *admin.RoleService } var _ router.Registrar = (*RoleHandler)(nil) func NewRoleHandler(roleService *admin.RoleService) *RoleHandler { return &RoleHandler{roleService: roleService} } func (h *RoleHandler) Register(r chi.Router) { r.Route("/roles", func(r chi.Router) { r.Get("/", h.List) r.Get("/{id}/menus", h.ListRoleMenus) r.Get("/{id}/apis", h.ListRoleApis) r.Get("/all", h.ListAll) r.Post("/", h.Create) r.Patch("/{id}", h.Update) r.Put("/{id}/menus", h.SetRoleMenus) r.Put("/{id}/apis", h.SetRoleApis) r.Delete("/{id}", h.Delete) }) } func (h *RoleHandler) List(w http.ResponseWriter, r *http.Request) { pagination := httputil.Pagination(r) result, err := h.roleService.List(r.Context(), pagination) if err != nil { httputil.Fail(w, err) return } resp := common.PageResponse{ Page: pagination.Page, PageSize: pagination.PageSize, List: result.List, Total: result.Total, } httputil.OkWithPage(w, &resp) } func (h *RoleHandler) ListRoleMenus(w http.ResponseWriter, r *http.Request) { id, err := httputil.URLParamInt32(r, "id") if err != nil { httputil.Fail(w, err) return } list, err := h.roleService.ListRoleMenus(r.Context(), id) if err != nil { httputil.Fail(w, err) return } httputil.Ok(w, list) } func (h *RoleHandler) ListRoleApis(w http.ResponseWriter, r *http.Request) { id, err := httputil.URLParamInt32(r, "id") if err != nil { httputil.Fail(w, err) return } list, err := h.roleService.ListRoleApis(r.Context(), id) if err != nil { httputil.Fail(w, err) return } httputil.Ok(w, list) } func (h *RoleHandler) ListAll(w http.ResponseWriter, r *http.Request) { roles, err := h.roleService.ListAll(r.Context()) if err != nil { httputil.Fail(w, err) return } httputil.Ok(w, roles) } func (h *RoleHandler) Create(w http.ResponseWriter, r *http.Request) { var req request.CreateRoleRequest if err := httputil.BindJson(r, &req); err != nil { httputil.Fail(w, err) return } if err := h.roleService.Create(r.Context(), req); err != nil { httputil.Fail(w, err) return } httputil.Ok(w) } func (h *RoleHandler) Update(w http.ResponseWriter, r *http.Request) { var req request.UpdateRoleRequest id, err := httputil.URLParamInt32(r, "id") if err != nil { httputil.Fail(w, err) return } if err = httputil.BindJson(r, &req); err != nil { httputil.Fail(w, err) return } if err = h.roleService.Update(r.Context(), id, req); err != nil { httputil.Fail(w, err) return } httputil.Ok(w) } func (h *RoleHandler) SetRoleMenus(w http.ResponseWriter, r *http.Request) { var req request.SetRoleMenusRequest id, err := httputil.URLParamInt32(r, "id") if err != nil { httputil.Fail(w, err) return } if err = httputil.BindJson(r, &req); err != nil { httputil.Fail(w, err) return } if err = h.roleService.SetRoleMenus(r.Context(), id, req); err != nil { httputil.Fail(w, err) return } httputil.Ok(w) } func (h *RoleHandler) SetRoleApis(w http.ResponseWriter, r *http.Request) { var req request.SetRoleApisRequest id, err := httputil.URLParamInt32(r, "id") if err != nil { httputil.Fail(w, err) return } if err = httputil.BindJson(r, &req); err != nil { httputil.Fail(w, err) return } if err = h.roleService.SetRoleApis(r.Context(), id, req); err != nil { httputil.Fail(w, err) return } httputil.Ok(w) } func (h *RoleHandler) Delete(w http.ResponseWriter, r *http.Request) { id, err := httputil.URLParamInt32(r, "id") if err != nil { httputil.Fail(w, err) return } if err = h.roleService.Delete(r.Context(), id); err != nil { httputil.Fail(w, err) return } httputil.Ok(w) }