from datetime import datetime from fastapi import APIRouter from pydantic import BaseModel from typing import Optional, List from backend.services.permission.role_service import RoleService from common.token.token_manager import TokenManager router = APIRouter() token_manager = TokenManager() role_service = RoleService() class QueryRoleRequest(BaseModel): role_key: Optional[str] = None role_name: Optional[str] = None page: int = 1 page_size: int = 10 class RoleResponse(BaseModel): id: str role_key: str role_name: str role_description: Optional[str] = None permission_ids: List[str] role_level: int created_at: datetime updated_at: datetime class QueryRoleResponse(BaseModel): items: List[RoleResponse] total: int page: int page_size: int @router.post( "/query", response_model=QueryRoleResponse, operation_id="query-role", summary="Query Roles (paginated)", description="Query roles with pagination and fuzzy search. Only Admin role allowed." ) async def query_roles( req: QueryRoleRequest, ) -> QueryRoleResponse: result = await role_service.query_roles(req.role_key, req.role_name, req.page, req.page_size) items = [RoleResponse(**item) for item in result["items"]] return QueryRoleResponse( items=items, total=result["total"], page=result["page"], page_size=result["page_size"] )