70 lines
2.8 KiB
Python
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="上传结果列表")
|