from pydantic import BaseModel, Field class UploadAssetResponse(BaseModel): storage_key: str ingest_job_id: str url: str = Field(..., description="Public URL of uploaded file") class DirectUploadPrepareRequest(BaseModel): workspace_id: str = Field(..., min_length=1) project_id: str = Field(..., min_length=1) library_id: str = Field(..., min_length=1) filename: str = Field(..., min_length=1, max_length=255) content_type: str = Field(default="application/octet-stream", min_length=1, max_length=100) file_size: int = Field(..., gt=0) class DirectUploadPrepareResponse(BaseModel): upload_url: str method: str storage_key: str expires_at: str fields: dict[str, str] max_size_bytes: int class DirectUploadCompleteRequest(BaseModel): workspace_id: str = Field(..., min_length=1) project_id: str = Field(..., min_length=1) library_id: str = Field(..., min_length=1) storage_key: str = Field(..., min_length=1, max_length=255) class DirectUploadCompleteResponse(BaseModel): storage_key: str ingest_job_id: str