ForcePilot/backend/server/routers/channels/capability_router.py
Kris bba1775220 refactor(channel-router): 清理冗余空行并优化代码结构
本次提交包含多类优化:
1.  移除多个路由文件中多余的空导入行,统一代码格式
2.  重构Query参数定义,将长参数拆分为多行提升可读性
3.  新增多个业务端点:
    - 渠道能力画像矩阵查询CAP-03
    - 配对审批计数接口用于待办角标
    - 批量查询对端目录资料接口
    - 向导扫码登录相关端点
    - 会话实时事件SSE推送端点
    - 工作台待办统计接口
4.  完善异常处理逻辑,补充OperationTimeoutError导入并优化NotImplementedError的细节返回
5.  调整路由导入顺序,修复动态路由路径冲突隐患
6.  更新文档注释与接口清单,修正部分接口描述细节
2026-07-06 20:50:03 +08:00

85 lines
3.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""能力查询路由CAP-01~CAP-03
统一采用模板 A控制面端口路由鉴权依赖 get_admin_user
调用 use_cases.capability_query.<method>raiseOnControlFailure 转译失败,
serialize_control_data 序列化响应。
路径设计:静态跨渠道查询先于动态路径声明,避免静态路径被动态参数捕获。
"""
from __future__ import annotations
from typing import Any
from fastapi import APIRouter, Depends, Request
from yuxi.channels.contract.dtos.channel import ChannelType
from yuxi.storage.postgres.models_business import User
from server.routers.channels import (
build_operator,
get_channel_use_cases,
raiseOnControlFailure,
serialize_control_data,
)
from server.utils.auth_middleware import get_admin_user
capability_router = APIRouter(tags=["channels-capability"])
@capability_router.get("/capabilities", response_model=dict)
async def list_capabilities(
request: Request,
use_cases=Depends(get_channel_use_cases),
current_user: User = Depends(get_admin_user),
) -> dict[str, Any]:
"""列出所有渠道能力声明CAP-01。对应控制面操作 capability/list。
聚合 PluginRegistry 中所有插件的 manifest.capabilities返回
渠道类型 → 能力声明的映射。无插件的渠道不出现在结果中。
"""
operator = build_operator(current_user, request)
result = await use_cases.capability_query.listCapabilities(
operator=operator,
)
raiseOnControlFailure(result)
return {"success": True, "data": serialize_control_data(result.data)}
@capability_router.get("/capabilities/matrix", response_model=dict)
async def list_capability_matrix(
request: Request,
use_cases=Depends(get_channel_use_cases),
current_user: User = Depends(get_admin_user),
) -> dict[str, Any]:
"""列出所有渠道能力画像矩阵CAP-03。对应控制面操作 capability/matrix。
返回每个插件的完整 ``ChannelCapabilityProfile``,包含静态能力声明、
运行时可用性、插件元数据与配置 schema供能力查询页渲染高密度矩阵。
"""
operator = build_operator(current_user, request)
result = await use_cases.capability_query.listCapabilityMatrix(
operator=operator,
)
raiseOnControlFailure(result)
return {"success": True, "data": serialize_control_data(result.data)}
@capability_router.get("/capabilities/{channel_type}", response_model=dict)
async def get_capability(
channel_type: ChannelType,
request: Request,
use_cases=Depends(get_channel_use_cases),
current_user: User = Depends(get_admin_user),
) -> dict[str, Any]:
"""查询单渠道能力详情CAP-02。对应控制面操作 capability/get。
返回指定渠道类型的完整 ChannelCapabilities 声明。
渠道未绑定插件抛 NotFoundError。
"""
operator = build_operator(current_user, request)
result = await use_cases.capability_query.getCapability(
channel_type=channel_type,
operator=operator,
)
raiseOnControlFailure(result)
return {"success": True, "data": serialize_control_data(result.data)}