from typing import Literal from pydantic import BaseModel, Field VideoReviewStatus = Literal["pending_review", "approved", "rejected"] class VideoItemResponse(BaseModel): id: str project_id: str generation_task_id: str name: str file_url: str file_size: int duration: float thumbnail_url: str | None = None width: int height: int fps: float status: str = "completed" review_status: str = "pending_review" generation_params: dict = Field(default_factory=dict) download_url: str | None = None generated_at: str = "" class ListVideosResponse(BaseModel): items: list[VideoItemResponse] total: int page: int page_size: int class UpdateVideoReviewRequest(BaseModel): review_status: VideoReviewStatus class BatchDownloadRequest(BaseModel): video_ids: list[str] class BatchDownloadResponse(BaseModel): job_id: str status: str = "pending" download_url: str | None = None