Files
MoviePilot/app/schemas/common.py
jxxghp a6dbd799d5 refactor(api): 渠道与存储管理端点通用化,端点层零目标特色
- schemas 新增公共 ManageRequest(target+action+params) 与 StorageAction 词汇表
- endpoint 层收敛为 POST /notification/manage、/storage/manage 两个通用接口,
  不再定义任何渠道/存储特定的名称、参数与响应字段,前端上送参数原样透传
- chain 层 manage_channel/manage_storage 接受字符串标识纯透明转发,
  StorageChain 移除全部特色管理方法
- FileManagerModule 新增 storage_manage 统一入口,模块返回归一化为
  {success, message, data};wechatclawbot channel_manage 同步归一化,
  路由标识兼容枚举名/值/对象
- dashboard 与 agentopsassistant 的用量查询改走 manage_storage(usage)
- 新增 10 项存储契约守护测试,通知侧补充 3 项链透传与字符串路由测试,
  API 守护测试对 ManageRequest 开放映射按设计豁免
2026-08-16 07:18:49 +08:00

91 lines
2.4 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.
"""API 端点共享的小型业务数据模型。"""
from typing import Any, Dict, Optional, Union
from pydantic import BaseModel, Field, RootModel
from typing_extensions import TypeAliasType
JsonData = TypeAliasType(
"JsonData",
Union[
dict[str, "JsonData"],
list["JsonData"],
str,
int,
float,
bool,
None,
],
)
"""可递归序列化的 JSON 数据;OpenAPI 会展示每一种合法 JSON 结构。"""
class JsonObject(RootModel[dict[str, JsonData]]):
"""字段由运行时扩展点决定的 JSON 对象。"""
class JsonObjectList(RootModel[list[JsonObject]]):
"""字段由运行时扩展点决定的 JSON 对象列表。"""
class IdData(BaseModel):
"""创建资源后返回的资源 ID。"""
id: Optional[int | str] = Field(default=None, description="资源 ID")
class ValueData(BaseModel):
"""单个动态配置值。"""
value: JsonData = Field(default=None, description="配置值")
class FileNameData(BaseModel):
"""文件操作结果中的文件名。"""
filename: Optional[str] = Field(default=None, description="文件名")
class NameData(BaseModel):
"""名称计算结果。"""
name: Optional[str] = Field(default=None, description="名称")
class ServiceClientInfo(BaseModel):
"""可选择的下载器或媒体服务器摘要。"""
name: Optional[str] = Field(default=None, description="实例名称")
type: Optional[str] = Field(default=None, description="服务类型")
class ProgressKeyData(BaseModel):
"""异步任务进度查询标识。"""
progress_key: str = Field(description="进度查询标识")
class BatchProgressKeyData(ProgressKeyData):
"""批量异步任务进度查询标识。"""
history_ids: list[int] = Field(default_factory=list, description="历史记录 ID 列表")
class TimeData(BaseModel):
"""网络请求耗时。"""
time: int | float = Field(description="耗时毫秒数")
class ManageRequest(BaseModel):
"""通用管理请求:目标标识 + 管理动作 + 透传参数
用于通知渠道、网盘存储等统一管理能力入口,
动作与参数的具体语义由目标模块自行解释
"""
target: str = Field(description="管理目标标识,如渠道名或存储类型")
action: str = Field(description="管理动作标识")
params: Dict[str, Any] = Field(default_factory=dict, description="表单与动作参数,透传给目标模块")