| """ |
| Files API 相关的领域模型 |
| """ |
| from typing import Optional, Dict, Any, List |
| from datetime import datetime |
| from pydantic import BaseModel, Field |
|
|
|
|
| class FileUploadConfig(BaseModel): |
| """文件上传配置""" |
| mime_type: Optional[str] = Field(None, description="MIME 类型") |
| display_name: Optional[str] = Field(None, description="显示名称,最多40个字符") |
|
|
|
|
| class CreateFileRequest(BaseModel): |
| """创建文件请求(用于初始化上传)""" |
| file: Optional[Dict[str, Any]] = Field(None, description="文件元数据") |
| |
|
|
| class FileMetadata(BaseModel): |
| """文件元数据响应""" |
| name: str = Field(..., description="文件名称,格式: files/{file_id}") |
| displayName: Optional[str] = Field(None, description="显示名称") |
| mimeType: str = Field(..., description="MIME 类型") |
| sizeBytes: str = Field(..., description="文件大小(字节)") |
| createTime: str = Field(..., description="创建时间 (RFC3339)") |
| updateTime: str = Field(..., description="更新时间 (RFC3339)") |
| expirationTime: str = Field(..., description="过期时间 (RFC3339)") |
| sha256Hash: Optional[str] = Field(None, description="SHA256 哈希值") |
| uri: str = Field(..., description="文件访问 URI") |
| state: str = Field(..., description="文件状态") |
| |
| class Config: |
| json_encoders = { |
| datetime: lambda v: v.isoformat() + "Z" |
| } |
|
|
|
|
| class ListFilesRequest(BaseModel): |
| """列出文件请求参数""" |
| pageSize: Optional[int] = Field(10, ge=1, le=100, description="每页大小") |
| pageToken: Optional[str] = Field(None, description="分页标记") |
|
|
|
|
| class ListFilesResponse(BaseModel): |
| """列出文件响应""" |
| files: List[FileMetadata] = Field(default_factory=list, description="文件列表") |
| nextPageToken: Optional[str] = Field(None, description="下一页标记") |
|
|
|
|
| class UploadInitResponse(BaseModel): |
| """上传初始化响应(内部使用)""" |
| file_metadata: FileMetadata |
| upload_url: str |
|
|
|
|
| class FileKeyMapping(BaseModel): |
| """文件与 API Key 的映射关系(内部使用)""" |
| file_name: str |
| api_key: str |
| user_token: str |
| created_at: datetime |
| expires_at: datetime |
|
|
|
|
| class DeleteFileResponse(BaseModel): |
| """删除文件响应""" |
| success: bool = Field(..., description="是否删除成功") |
| message: Optional[str] = Field(None, description="消息") |