Files
MemoryBear/api/app/schemas/generic_file_schema.py

70 lines
2.8 KiB
Python

"""
Schemas for Generic File Upload System
"""
from pydantic import BaseModel, Field, ConfigDict
from typing import Optional, Dict, Any
import datetime
import uuid
from app.core.upload_enums import UploadContext
class GenericFileBase(BaseModel):
"""Base schema for generic file"""
file_name: str = Field(..., description="文件名")
context: UploadContext = Field(..., description="上传上下文")
is_public: bool = Field(False, description="是否公开")
file_metadata: Optional[Dict[str, Any]] = Field(default={}, description="文件元数据")
class GenericFileCreate(GenericFileBase):
"""Schema for creating a generic file"""
tenant_id: uuid.UUID
created_by: uuid.UUID
file_ext: str
file_size: int
mime_type: Optional[str] = None
storage_path: str
class GenericFileResponse(BaseModel):
"""Schema for generic file response"""
id: uuid.UUID = Field(..., description="文件ID")
file_name: str = Field(..., description="文件名")
file_ext: str = Field(..., description="文件扩展名")
file_size: int = Field(..., description="文件大小(字节)")
mime_type: Optional[str] = Field(None, description="MIME类型")
context: str = Field(..., description="上传上下文")
access_url: Optional[str] = Field(None, description="访问URL")
is_public: bool = Field(..., description="是否公开")
file_metadata: Dict[str, Any] = Field(default={}, description="文件元数据")
status: str = Field(..., description="文件状态")
model_config = ConfigDict(from_attributes=True)
created_at: datetime.datetime = Field(..., description="创建时间")
updated_at: datetime.datetime = Field(..., description="更新时间")
class FileMetadataUpdate(BaseModel):
"""Schema for updating file metadata"""
file_name: Optional[str] = Field(None, description="文件名")
file_metadata: Optional[Dict[str, Any]] = Field(None, description="文件元数据")
is_public: Optional[bool] = Field(None, description="是否公开")
class UploadResultSchema(BaseModel):
"""Schema for upload result"""
success: bool = Field(..., description="是否成功")
file_id: Optional[uuid.UUID] = Field(None, description="文件ID")
file_name: str = Field(..., description="文件名")
error: Optional[str] = Field(None, description="错误信息")
file_info: Optional[GenericFileResponse] = Field(None, description="文件信息")
class BatchUploadResponse(BaseModel):
"""Schema for batch upload response"""
total: int = Field(..., description="总文件数")
success_count: int = Field(..., description="成功数量")
failed_count: int = Field(..., description="失败数量")
results: list[UploadResultSchema] = Field(..., description="上传结果列表")