from datetime import datetime from fastapi import APIRouter from pydantic import BaseModel from typing import Optional, List from backend.services.permission.permission_service import PermissionService from common.token.token_manager import TokenManager router = APIRouter() token_manager = TokenManager() permission_service = PermissionService() class QueryPermissionRequest(BaseModel): permission_key: Optional[str] = None permission_name: Optional[str] = None page: int = 1 page_size: int = 10 class PermissionResponse(BaseModel): id: str permission_key: str permission_name: str description: Optional[str] = None created_at: datetime updated_at: datetime class QueryPermissionResponse(BaseModel): items: List[PermissionResponse] total: int page: int page_size: int @router.post( "/query", response_model=QueryPermissionResponse, operation_id="query-permission", summary="Query Permissions (paginated)", description="Query permissions with pagination and fuzzy search. Only Admin role allowed." ) async def query_permissions( req: QueryPermissionRequest, ) -> QueryPermissionResponse: result = await permission_service.query_permissions(req.permission_key, req.permission_name, req.page, req.page_size) items = [PermissionResponse(**item) for item in result["items"]] return QueryPermissionResponse( items=items, total=result["total"], page=result["page"], page_size=result["page_size"] )