Files
blog-server/internal/handler/admin/role.go
2026-08-19 22:05:49 +08:00

197 lines
3.9 KiB
Go

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(w, 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(w, 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(w, 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(w, 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)
}