package permission import ( "RenewCMS/internal/domain/role" "RenewCMS/internal/infrastructure/useCases" "encoding/json" "net/http" ) type Handler struct { ListUseCase *useCases.ListPermissionsUseCase } func NewHandler(list *useCases.ListPermissionsUseCase) *Handler { return &Handler{ListUseCase: list} } type permissionItem struct { Key string `json:"key"` ScopeKind role.Kind `json:"scope_kind"` OwnerOnly bool `json:"owner_only"` PerType bool `json:"per_type"` } type permissionGroup struct { Key string `json:"key"` Items []permissionItem `json:"items"` } type permissionResponse struct { Groups []permissionGroup `json:"groups"` } func toResponse(groups []useCases.PermissionGroup) permissionResponse { response := permissionResponse{Groups: make([]permissionGroup, 0, len(groups))} for _, group := range groups { items := make([]permissionItem, 0, len(group.Items)) for _, permission := range group.Items { items = append(items, permissionItem{Key: permission.Key, ScopeKind: permission.Kind, OwnerOnly: permission.OwnerOnly, PerType: permission.PerType()}) } response.Groups = append(response.Groups, permissionGroup{Key: group.Key, Items: items}) } return response } func (h *Handler) List(w http.ResponseWriter, r *http.Request) { body, err := json.Marshal(toResponse(h.ListUseCase.List())) if err != nil { http.Error(w, "Internal server error", http.StatusInternalServerError) return } _, _ = w.Write(body) }