58 lines
1.3 KiB
Python
58 lines
1.3 KiB
Python
|
|
"""Pydantic schemas for file upload, download, and list responses."""
|
||
|
|
|
||
|
|
import uuid
|
||
|
|
from datetime import datetime
|
||
|
|
from typing import Optional
|
||
|
|
|
||
|
|
from pydantic import BaseModel, ConfigDict
|
||
|
|
|
||
|
|
|
||
|
|
class FileUploadResponse(BaseModel):
|
||
|
|
"""Response after a successful file upload."""
|
||
|
|
|
||
|
|
model_config = ConfigDict(from_attributes=True)
|
||
|
|
|
||
|
|
id: uuid.UUID
|
||
|
|
vehicle_id: uuid.UUID
|
||
|
|
original_filename: str
|
||
|
|
stored_filename: str
|
||
|
|
file_path: str
|
||
|
|
mime_type: str
|
||
|
|
file_size: int
|
||
|
|
thumbnail_path: Optional[str] = None
|
||
|
|
created_at: Optional[datetime] = None
|
||
|
|
updated_at: Optional[datetime] = None
|
||
|
|
|
||
|
|
|
||
|
|
class FileResponse(BaseModel):
|
||
|
|
"""Full file metadata response."""
|
||
|
|
|
||
|
|
model_config = ConfigDict(from_attributes=True)
|
||
|
|
|
||
|
|
id: uuid.UUID
|
||
|
|
vehicle_id: uuid.UUID
|
||
|
|
original_filename: str
|
||
|
|
stored_filename: str
|
||
|
|
file_path: str
|
||
|
|
mime_type: str
|
||
|
|
file_size: int
|
||
|
|
thumbnail_path: Optional[str] = None
|
||
|
|
created_at: Optional[datetime] = None
|
||
|
|
updated_at: Optional[datetime] = None
|
||
|
|
|
||
|
|
|
||
|
|
class FileListResponse(BaseModel):
|
||
|
|
"""Paginated file list response."""
|
||
|
|
|
||
|
|
items: list[FileResponse]
|
||
|
|
total: int
|
||
|
|
page: int
|
||
|
|
page_size: int
|
||
|
|
|
||
|
|
|
||
|
|
class FileDeleteResponse(BaseModel):
|
||
|
|
"""Response after deleting a file."""
|
||
|
|
|
||
|
|
message: str = "File deleted"
|
||
|
|
id: uuid.UUID
|