ForcePilot/backend/server/routers/channels/capability_router.py
Kris af5b209be1 refactor(channel routers): 统一分页参数并优化接口实现
1.  新增统一分页常量定义,替换各路由零散的Query参数声明
2.  批量替换多个列表接口的分页参数为预设常量
3.  优化插件目录、消息搜索等接口的参数与文档
4.  修复死信导出接口的参数命名不一致问题
2026-07-11 15:55:45 +08:00

93 lines
3.5 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,
status: str | None = None,
capability: str | None = None,
use_cases=Depends(get_channel_use_cases),
current_user: User = Depends(get_admin_user),
) -> dict[str, Any]:
"""列出所有渠道能力画像矩阵CAP-03。对应控制面操作 capability/matrix。
返回每个插件的完整 ``ChannelCapabilityProfile``,包含静态能力声明、
运行时可用性、插件元数据与配置 schema供能力查询页渲染高密度矩阵。
查询参数(可选,供前端服务端筛选预留):
status: 按运行时可用性状态过滤available/unavailable/unknown/unsupported
capability: 按能力字段名过滤(如 streaming、supports_image_outbound
"""
operator = build_operator(current_user, request)
result = await use_cases.capability_query.listCapabilityMatrix(
operator=operator,
status=status,
capability=capability,
)
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)}