from __future__ import annotations from pydantic import BaseModel, Field from app.enums.admin_upload import AdminUploadResourceTypeEnum, AdminUploadSceneEnum class AdminUploadMediaReferenceOut(BaseModel): url: str = Field(..., description="附件URL。") type: str = Field(..., description="附件类型:image/video/audio/pdf/file。") name: str | None = Field(None, description="附件名称。") duration: float | None = Field(None, description="音视频时长,单位秒。") source: str = Field("admin_upload", description="来源标识。") upload_resource_id: str | None = Field(None, description="UploadResource资源ID。") display_url: str | None = Field(None, description="展示URL。") preview_url: str | None = Field(None, description="预览URL。") role: str | None = Field(None, description="参考素材角色。") class AdminUploadFileOut(BaseModel): resource_id: str = Field(..., description="UploadResource资源ID。") scene: AdminUploadSceneEnum = Field(..., description="上传场景。") module: str = Field(..., description="上传资源模块。") resource_type: AdminUploadResourceTypeEnum = Field(..., description="资源类型。") url: str = Field(..., description="文件URL。") file_name: str = Field(..., description="保存后的文件名。") original_file_name: str | None = Field(None, description="原始文件名。") file_size_bytes: int = Field(0, description="文件大小,单位字节。") duration_seconds: float | None = Field(None, description="音视频时长,单位秒。") media_reference: AdminUploadMediaReferenceOut | None = Field(None, description="兼容生成任务 media_references 的附件引用对象。")