# ============================================================================= # DEPRECATED · 企微IT智能服务台 — 服务路由定义 # ============================================================================= # ⚠️ 此文件已废弃(2026-07-08),实际路由由 router.py 统一注册。 # 旧 MFA 路由已被 /auth/otp-* 替代。 # 仅保留用于 test_service_routes.py 测试参考,生产环境不使用。 # 不设置 SERVICE_NAME 时加载全部路由(向后兼容) # ============================================================================= import os from typing import Dict, List, Tuple from fastapi import APIRouter # 路由模块导入 from app.api import ( wecom_callback, conversations, messages, agents, quick_replies, h5, agent_notes, system, wingman, todo_items, troubleshooting_templates, employees, upload, admin_api, portal, admin_roles, approval, wecom_jsapi, auth_qrcode, high_risk_routes, mfa, auth_wecom_sso, audit_logs, ) # admin 子目录的路由需要单独导入 from app.api.admin.security_comparison import router as security_comparison_router # MFA 有两个 router,需要特殊处理 _MFA_ROUTER = mfa.router _MFA_ADMIN_ROUTER = mfa.admin_router # 路由定义:模块名 -> (router对象, tags, prefix) # prefix 为空时使用路由对象默认的 prefix _ROUTE_MODULES = { # 企微回调 "wecom_callback": (wecom_callback.router, ["企微回调"], None), # 会话管理 "conversations": (conversations.router, ["会话管理"], None), "messages": (messages.router, ["消息管理"], None), # 坐席管理 "agents": (agents.router, ["坐席管理"], None), "quick_replies": (quick_replies.router, ["快速回复"], None), # H5 用户端 "h5": (h5.router, ["H5用户端"], None), # 坐席备注 "agent_notes": (agent_notes.router, ["坐席备注"], None), # 系统管理 "system": (system.router, ["系统管理"], None), # AI Wingman "wingman": (wingman.router, ["AI Wingman"], None), # 待办事项 "todo_items": (todo_items.router, ["待办事项"], None), # 排查模板 "troubleshooting_templates": (troubleshooting_templates.router, ["排查模板"], None), # 员工管理 "employees": (employees.router, ["员工管理"], None), # 文件上传 "upload": (upload.router, ["文件上传"], None), # 管理后台 "admin_api": (admin_api.router, ["管理后台"], None), # Portal 统一入口 "portal": (portal.router, ["统一入口"], None), # 角色管理 "admin_roles": (admin_roles.router, ["角色管理"], None), # 审批流程 "approval": (approval.router, ["审批流程"], None), # 企微 JS-SDK "wecom_jsapi": (wecom_jsapi.router, ["企微JS-SDK"], None), # 扫码登录 "auth_qrcode": (auth_qrcode.router, ["扫码登录"], None), # 高危操作 "high_risk_routes": (high_risk_routes.router, ["高危操作"], None), # MFA 二次认证(用户端和管理端分开) "mfa": (_MFA_ROUTER, ["MFA二次认证"], None), "mfa_admin": (_MFA_ADMIN_ROUTER, ["MFA管理(管理员)"], None), # 企微 SSO "auth_wecom_sso": (auth_wecom_sso.router, ["企微SSO"], None), # 审计日志 "audit_logs": (audit_logs.router, ["审计日志"], None), # 终端安全对比 "security_comparison": (security_comparison_router, ["终端安全对比"], None), } # 服务路由映射:服务名 -> 需要加载的路由模块列表 SERVICE_ROUTE_MAP: Dict[str, List[str]] = { # Core 服务:核心服务(鉴权、员工、角色) "core": [ "employees", # 员工管理 "auth_qrcode", # 扫码登录 "mfa", # MFA 二次认证 "auth_wecom_sso", # 企微 SSO "portal", # 角色切换 ], # Conversation 服务:会话服务(会话、消息、H5、WebSocket) "conversation": [ "wecom_callback", # 企微消息接收 "conversations", # 会话管理 "messages", # 消息管理 "h5", # H5 用户端 "todo_items", # 待办事项 "troubleshooting_templates", # 排查模板 ], # Agent 服务:坐席服务 "agent": [ "agents", # 坐席管理 "quick_replies", # 快速回复 "agent_notes", # 坐席备注 "approval", # 审批流程 ], # AI 服务:AI 服务(Dify 调用、Wingman) "ai": [ "wingman", # AI Wingman ], # Admin 服务:管理服务(仪表盘、配置、集成、审核) "admin": [ "admin_api", # 管理后台 API(必须放第一个,因为 security_comparison 依赖它) "admin_roles", # 角色管理 "audit_logs", # 审计日志 "high_risk_routes", # 高危操作 "system", # 系统管理 "upload", # 文件上传 "wecom_jsapi", # 企微 JS-SDK "security_comparison", # 终端安全对比 "mfa_admin", # MFA 管理端 ], } def get_routes_for_service(service_name: str) -> List[Tuple]: """根据服务名获取需要加载的路由列表 Args: service_name: 服务名 (core/conversation/agent/ai/admin) 或 None/空 Returns: 路由元组列表:[(router, tags, prefix), ...] """ # 不设置 SERVICE_NAME 或设置为 "all" 时,加载全部路由(向后兼容) if not service_name or service_name.lower() == "all": return [ (_ROUTE_MODULES[name][0], _ROUTE_MODULES[name][1], _ROUTE_MODULES[name][2]) for name in _ROUTE_MODULES.keys() ] # 根据服务名获取路由列表 route_names = SERVICE_ROUTE_MAP.get(service_name.lower(), []) # 查找并返回路由对象 result = [] for name in route_names: if name in _ROUTE_MODULES: result.append(( _ROUTE_MODULES[name][0], _ROUTE_MODULES[name][1], _ROUTE_MODULES[name][2], )) return result def get_current_service_name() -> str: """获取当前服务名称 Returns: SERVICE_NAME 环境变量,或空字符串 """ return os.getenv("SERVICE_NAME", "") def is_service_mode() -> bool: """判断是否处于服务模式(非单体模式) Returns: True 如果设置了有效的 SERVICE_NAME """ name = get_current_service_name() return bool(name and name.lower() != "all")