Initial commit
This commit is contained in:
69
app/schemas/generic_file_schema.py
Normal file
69
app/schemas/generic_file_schema.py
Normal file
@@ -0,0 +1,69 @@
|
||||
"""
|
||||
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="上传结果列表")
|
||||
Reference in New Issue
Block a user