home页生成记录API 补追文件

This commit is contained in:
2026-06-26 15:43:43 +08:00
parent 7d4eaebb79
commit 6ce6c23b55
4 changed files with 687 additions and 0 deletions
@@ -0,0 +1,119 @@
from __future__ import annotations
from pydantic import BaseModel, ConfigDict, Field
from app.enums.recent_generation import RecentGenerationModuleEnum, RecentGenerationResourceTypeEnum
from app.schemas.common import NaiveDatetimeOptional
class RecentGenerationItemOut(BaseModel):
"""最近生成记录响应项。"""
model_config = ConfigDict(
json_schema_extra={
"example": {
"generated_time": "2026-06-26T14:30:00",
"result_url": "https://example.com/generate/video/demo.mp4?exp=1780000000&sign=xxxx",
"cover_url": "https://example.com/generate/cover/demo.jpg?exp=1780000000&sign=xxxx",
"module": "shot_replicate",
"shot_task_set_id": "0019ef0000000000001",
"shot_segment_id": "0019ef0000000000002",
"module_project_id": "0019ef0000000000003",
"module_step_id": "0019ef0000000000004",
"generation_id": "0019ef0000000000005",
"resource_type": "video",
}
}
)
generated_time: NaiveDatetimeOptional = Field(
None,
description="生成完成时间。优先使用 generated_at;历史数据 generated_at 为空时回退 updated_at,再回退 created_at。",
)
result_url: str | None = Field(
None,
description="生成结果链接。resource_type=image 时为图片链接;resource_type=video 时为视频链接。返回前会按项目资源签名规则追加 exp/sign。",
)
cover_url: str | None = Field(
None,
description="视频封面链接。仅视频资源通常有值;图片资源或历史无封面数据时返回 null。返回前会按项目资源签名规则追加 exp/sign。",
)
module: RecentGenerationModuleEnum = Field(
...,
description=(
"数据模块枚举:"
"project=项目生成 GenerationRecord"
"chat_ai=AI创作 ChatGenerationTask.generation_mode=chatapi_async"
"hot_opening_replicate=爆款开头复刻 ChatGenerationTask.generation_mode=hot_opening_replicate"
"shot_replicate=拆镜复刻 ChatGenerationTask.generation_mode=shot_replicate。"
),
)
shot_task_set_id: str | None = Field(
None,
description="关联拆镜总任务ID。仅 shot_replicate 模块可能有值,来源 shot_replicate_segments.task_set_id;其他模块返回 null。",
)
shot_segment_id: str | None = Field(
None,
description="关联拆镜片段ID。仅 shot_replicate 模块可能有值,来源 shot_replicate_segments.id;其他模块返回 null。",
)
module_project_id: str | None = Field(
None,
description="通用模块项目ID。hot_opening_replicate/shot_replicate 模块可能有值,来源 module_generation_steps.project_idproject/chat_ai 返回 null。",
)
module_step_id: str | None = Field(
None,
description="通用模块步骤ID。hot_opening_replicate/shot_replicate 模块可能有值,来源 module_generation_steps.idproject/chat_ai 返回 null。",
)
generation_id: str = Field(
...,
description="生成ID。project 模块为 generation_records.idchat_ai/hot_opening_replicate/shot_replicate 模块为 chat_generation_tasks.id。",
)
resource_type: RecentGenerationResourceTypeEnum = Field(
...,
description="资源类型枚举:image=图片资源;video=视频资源。前端可据此决定预览组件。",
)
class RecentGenerationGroupOut(BaseModel):
"""最近生成记录固定分组响应。"""
model_config = ConfigDict(
json_schema_extra={
"example": {
"project": [],
"chat_ai": [
{
"generated_time": "2026-06-26T14:30:00",
"result_url": "https://example.com/generate/image/demo.png?exp=1780000000&sign=xxxx",
"cover_url": None,
"module": "chat_ai",
"shot_task_set_id": None,
"shot_segment_id": None,
"module_project_id": None,
"module_step_id": None,
"generation_id": "0019ef0000000000010",
"resource_type": "image",
}
],
"hot_opening_replicate": [],
"shot_replicate": [],
}
}
)
project: list[RecentGenerationItemOut] = Field(
default_factory=list,
description="项目生成最近记录数组,来源 generation_records。未查询该模块或无数据时返回空数组。",
)
chat_ai: list[RecentGenerationItemOut] = Field(
default_factory=list,
description="AI创作最近记录数组,来源 chat_generation_tasks,条件 generation_mode=chatapi_async。未查询该模块或无数据时返回空数组。",
)
hot_opening_replicate: list[RecentGenerationItemOut] = Field(
default_factory=list,
description="爆款开头复刻最近记录数组,来源 chat_generation_tasks,条件 generation_mode=hot_opening_replicate。未查询该模块或无数据时返回空数组。",
)
shot_replicate: list[RecentGenerationItemOut] = Field(
default_factory=list,
description="拆镜复刻最近记录数组,来源 chat_generation_tasks,条件 generation_mode=shot_replicate。未查询该模块或无数据时返回空数组。",
)