8237d170a5
[skip ci-format-check] #1899 clip_count 参数透传(from-assets 端点) - ClipsFromAssetsRequest 新增 clip_count: Optional[int] (1-10) 字段 - 保留旧字段 required_clips_count 兼容:未传 clip_count 时回退旧字段(超 10 截断);两者都未传时默认 3 段 - 按 clip_count 创建 N 个片段,大于模板 segment 数时按顺序循环复用 segment 配置 - 每个片段时长在对应 segment 的 duration_min/duration_max 之间随机取值,保持原有轮询分配逻辑 #1900 模板管理 API 清理(前端 PR#1911 my-templates/editing-planner 下线) - 保留 GET /templates 列表端点(生成页自动选模板使用) - 删除 HTTP 端点:GET/POST/PUT/PATCH/DELETE /templates/{id}、POST copy、GET usage、 POST toggle-favorite、POST validate、GET/POST/DELETE /categories、GET /tags/list - 保留内部默认模板兜底 _get_or_create_default_template_id 及 CreateTemplateUseCase - 删除对应 response_model 中不再使用的类(Copy/Update/Validate/Category/Usage/Favorite 等) - 清理测试:删除集成测试 test_template_categories_api.py,更新 3 个单测适配新 clip_count 语义 DB:未涉及 schema 变更(models 本就无 is_favorite/usage_count 等列),跳过 migration。 新增 scripts/cleanup_e2e_test_data.sql 供运维在 staging DB 手动清理 e2e-gen-*/asset-create_* 账号残留模板数据。 单测:15128 passed, 28 skipped(全量 tests/unit/)
84 lines
2.4 KiB
Python
Executable File
84 lines
2.4 KiB
Python
Executable File
"""Template API schemas(精简版:仅保留列表接口 + 默认模板自动兜底所需字段).
|
|
|
|
前端 PR#1911 删除 my-templates / editing-planner / templates 管理页后,
|
|
模板 CRUD / 分类 / 标签 / 收藏 / 复制 / 校验 / 使用统计等端点全部下线,
|
|
对应 Request/Response 模型也一并清理。
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from datetime import datetime
|
|
from typing import Any, Dict, List, Optional
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
# ── Segment ──
|
|
|
|
|
|
class SegmentResponse(BaseModel):
|
|
id: str
|
|
template_id: str
|
|
segment_order: int
|
|
duration_min: float
|
|
duration_max: float
|
|
material_type: Optional[str] = None
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
|
|
|
|
class SegmentRequest(BaseModel):
|
|
segment_order: int
|
|
duration_min: float
|
|
duration_max: float
|
|
material_type: Optional[str] = None
|
|
|
|
|
|
# ── Template Response ──
|
|
|
|
|
|
class TemplateResponse(BaseModel):
|
|
id: str
|
|
user_id: str
|
|
name: str
|
|
mode: str
|
|
category: str = ""
|
|
tags: List[str] = Field(default_factory=list)
|
|
title_config: Dict[str, Any] = Field(default_factory=dict)
|
|
subtitle_config: Dict[str, Any] = Field(default_factory=dict)
|
|
bgm_config: Dict[str, Any] = Field(default_factory=dict)
|
|
estimated_duration: float = 0.0
|
|
segments: List[SegmentResponse] = Field(default_factory=list)
|
|
is_active: bool = True
|
|
is_favorite: bool = False
|
|
usage_count: int = 0
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
|
|
|
|
class ListTemplatesResponse(BaseModel):
|
|
items: List[TemplateResponse]
|
|
total: int = 0
|
|
|
|
|
|
# ── Template Request(保留给内部 _get_or_create_default_template_id 兜底创建默认模板使用)──
|
|
|
|
|
|
class CreateTemplateRequest(BaseModel):
|
|
name: str
|
|
mode: str
|
|
category: str = ""
|
|
tags: List[str] = Field(default_factory=list)
|
|
title_config: Dict[str, Any] = Field(default_factory=dict)
|
|
subtitle_config: Dict[str, Any] = Field(default_factory=dict)
|
|
bgm_config: Dict[str, Any] = Field(default_factory=dict)
|
|
estimated_duration: float = 0.0
|
|
segments: List[SegmentRequest] = Field(default_factory=list)
|
|
|
|
|
|
class GenerateWarningResponse(BaseModel):
|
|
"""兼容老 import(如校验逻辑内部复用);模板管理页已下线,可按需进一步清理。"""
|
|
|
|
code: str
|
|
message: str
|
|
details: Dict[str, Any] = Field(default_factory=dict)
|