ForcePilot/backend/server/routers/channels/capability_router.py

85 lines
3.1 KiB
Python
Raw Normal View History

"""能力查询路由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)}