from pydantic import BaseModel, Field class CreateAssetRequest(BaseModel): workspace_id: str = Field(..., min_length=1) project_id: str = Field(..., min_length=1) library_id: str = Field(..., min_length=1) name: str = Field(..., min_length=1, max_length=100) storage_key: str = Field(..., min_length=1, max_length=255) mime_type: str = Field(..., min_length=1, max_length=100) metadata: dict[str, object] = Field(default_factory=dict) file_size: int = Field(default=0, ge=0) thumbnail_url: str | None = None duration: float | None = Field(default=None, ge=0) width: int | None = Field(default=None, ge=0) height: int | None = Field(default=None, ge=0) fps: float | None = Field(default=None, ge=0) codec: str | None = None status: str = Field(default="uploading") classification_status: str = Field(default="pending") quality_score: float | None = Field(default=None, ge=0, le=100) uploaded_by_user_id: str = Field(default="", max_length=100) class UpdateAssetReviewRequest(BaseModel): review_status: str = Field(..., pattern="^(pending_review|approved|rejected)$") class AssetResponse(BaseModel): id: str workspace_id: str project_id: str library_id: str name: str storage_key: str mime_type: str metadata: dict[str, object] file_size: int thumbnail_url: str | None = None duration: float | None = None width: int | None = None height: int | None = None fps: float | None = None codec: str | None = None status: str classification_status: str quality_score: float | None = None uploaded_by_user_id: str class ListAssetsResponse(BaseModel): items: list[AssetResponse]