from typing import Dict, List, Optional from services.role_manager import role_manager class RoleService: async def get_roles_paginated(self, page: int, page_size: int, search: Optional[str] = None): """分页获取角色列表,支持搜索""" roles = await role_manager.get_all_roles() filtered_roles = {} for key, config in roles.items(): if search: name = config.get("name", "") description = config.get("description", "") if search.lower() not in name.lower() and search.lower() not in description.lower(): continue filtered_roles[key] = config total_roles = len(filtered_roles) start_idx = (page - 1) * page_size end_idx = start_idx + page_size role_items = list(filtered_roles.items()) paged_roles = role_items[start_idx:end_idx] result = [] for key, config in paged_roles: languages = [] if "multilingual" in config: languages = list(config["multilingual"].keys()) result.append({ "role_key": key, "name": config.get("name", "未命名角色"), "description": config.get("description", ""), "languages": languages }) return { "total": total_roles, "page": page, "page_size": page_size, "data": result } async def get_role_summaries(self) -> List[Dict]: """获取角色简要信息列表(仅包含key和name)""" roles = await role_manager.get_all_roles() return [ { "role_key": key, "name": config.get("name", "未命名角色") } for key, config in roles.items() ] role_service = RoleService()