1. 移除多个导出接口的显式response_model声明 2. 调整access_rule和test_case的创建接口位置,修复静态路径冲突 3. 优化适配器配置校验的异常处理逻辑 4. 重构集成路由的查询逻辑,统一使用get_integration_or_raise 5. 新增channels路由组下的capability、reports、dashboard、webhook、wizard、doctor、directory、session共8个子路由模块 6. 注册channels_router到全局路由列表
67 lines
2.3 KiB
Python
67 lines
2.3 KiB
Python
"""能力查询路由(CAP-01~CAP-02)。
|
||
|
||
统一采用模板 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/{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)}
|