112 lines
2.7 KiB
Python
112 lines
2.7 KiB
Python
"""
|
|
Data models for File Management Service
|
|
"""
|
|
from pydantic import BaseModel, Field
|
|
from datetime import datetime
|
|
from typing import Optional, List, Dict, Any
|
|
from enum import Enum
|
|
|
|
class FileType(str, Enum):
|
|
IMAGE = "image"
|
|
VIDEO = "video"
|
|
AUDIO = "audio"
|
|
DOCUMENT = "document"
|
|
ARCHIVE = "archive"
|
|
OTHER = "other"
|
|
|
|
class FileStatus(str, Enum):
|
|
PENDING = "pending"
|
|
PROCESSING = "processing"
|
|
READY = "ready"
|
|
ERROR = "error"
|
|
DELETED = "deleted"
|
|
|
|
class FileMetadata(BaseModel):
|
|
id: str
|
|
filename: str
|
|
original_name: str
|
|
size: int
|
|
content_type: str
|
|
file_type: FileType
|
|
bucket: str
|
|
object_name: str
|
|
user_id: str
|
|
hash: str
|
|
status: FileStatus = FileStatus.READY
|
|
public: bool = False
|
|
has_thumbnail: bool = False
|
|
thumbnail_url: Optional[str] = None
|
|
tags: Dict[str, Any] = {}
|
|
metadata: Dict[str, Any] = {}
|
|
download_count: int = 0
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
deleted_at: Optional[datetime] = None
|
|
|
|
class FileUploadResponse(BaseModel):
|
|
file_id: str
|
|
filename: str
|
|
size: int
|
|
content_type: str
|
|
file_type: FileType
|
|
bucket: str
|
|
public: bool
|
|
has_thumbnail: bool
|
|
thumbnail_url: Optional[str] = None
|
|
download_url: Optional[str] = None
|
|
created_at: datetime
|
|
message: str = "File uploaded successfully"
|
|
|
|
class FileListResponse(BaseModel):
|
|
files: List[FileMetadata]
|
|
total: int
|
|
limit: int
|
|
offset: int
|
|
has_more: bool
|
|
|
|
class StorageStats(BaseModel):
|
|
total_files: int
|
|
total_size: int
|
|
buckets: List[str]
|
|
users_count: int
|
|
file_types: Dict[str, int]
|
|
storage_used_percentage: Optional[float] = None
|
|
|
|
class ThumbnailRequest(BaseModel):
|
|
file_id: str
|
|
width: int = Field(200, ge=50, le=1000)
|
|
height: int = Field(200, ge=50, le=1000)
|
|
quality: int = Field(85, ge=50, le=100)
|
|
format: str = Field("jpeg", pattern="^(jpeg|png|webp)$")
|
|
|
|
class PresignedUrlResponse(BaseModel):
|
|
url: str
|
|
expires_in: int
|
|
method: str
|
|
headers: Optional[Dict[str, str]] = None
|
|
|
|
class BatchOperationResult(BaseModel):
|
|
successful: List[str]
|
|
failed: List[Dict[str, str]]
|
|
total_processed: int
|
|
total_successful: int
|
|
total_failed: int
|
|
|
|
class FileShareLink(BaseModel):
|
|
share_url: str
|
|
expires_in: int
|
|
file_id: str
|
|
filename: str
|
|
created_at: datetime
|
|
expires_at: datetime
|
|
|
|
class FileProcessingJob(BaseModel):
|
|
job_id: str
|
|
file_id: str
|
|
job_type: str # thumbnail, compress, convert, etc.
|
|
status: str # pending, processing, completed, failed
|
|
progress: Optional[float] = None
|
|
result: Optional[Dict[str, Any]] = None
|
|
error: Optional[str] = None
|
|
created_at: datetime
|
|
completed_at: Optional[datetime] = None |