57 lines
1.5 KiB
Python
57 lines
1.5 KiB
Python
"""轮播商品视频的请求与任务响应契约。"""
|
|
from __future__ import annotations
|
|
|
|
from datetime import datetime
|
|
|
|
from pydantic import BaseModel, Field, field_validator
|
|
|
|
|
|
class VideoCreateRequest(BaseModel):
|
|
"""按传入顺序把 2–5 张当前商品图片合成为无音轨轮播视频。"""
|
|
|
|
asset_ids: list[str] = Field(min_length=2, max_length=5)
|
|
|
|
@field_validator("asset_ids")
|
|
@classmethod
|
|
def asset_ids_must_be_unique(cls, values: list[str]) -> list[str]:
|
|
if len(set(values)) != len(values):
|
|
raise ValueError("合成视频不能重复选择同一张图片")
|
|
return values
|
|
|
|
|
|
class VideoCreateResponse(BaseModel):
|
|
job_id: str
|
|
|
|
|
|
class VideoDeleteResponse(BaseModel):
|
|
deleted: bool = True
|
|
|
|
|
|
class VideoResultOut(BaseModel):
|
|
item_id: str
|
|
status: str
|
|
url: str | None = None
|
|
error: str | None = None
|
|
|
|
|
|
class VideoJobOut(BaseModel):
|
|
id: str
|
|
kind: str = "slideshow_video"
|
|
status: str
|
|
total: int = 1
|
|
completed: int = 0
|
|
failed: int = 0
|
|
cancel_requested: bool = False
|
|
preset: str = "wb_ozon"
|
|
source_asset_ids: list[str] = Field(default_factory=list)
|
|
slide_seconds: float = 0.0
|
|
duration_seconds: float | None = None
|
|
width: int = 810
|
|
height: int = 1080
|
|
file_size_bytes: int | None = None
|
|
created_at: datetime | None = None
|
|
started_at: datetime | None = None
|
|
completed_at: datetime | None = None
|
|
result: VideoResultOut | None = None
|
|
error: str | None = None
|