"""轮播商品视频的请求与任务响应契约。""" 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