1. 新增统一分页常量定义,替换各路由零散的Query参数声明 2. 批量替换多个列表接口的分页参数为预设常量 3. 优化插件目录、消息搜索等接口的参数与文档 4. 修复死信导出接口的参数命名不一致问题
93 lines
3.5 KiB
Python
93 lines
3.5 KiB
Python
"""能力查询路由(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)}
|