Initial commit - cleaned repository

This commit is contained in:
jungwoo choi
2025-09-28 20:41:57 +09:00
commit e3c28f796a
188 changed files with 28102 additions and 0 deletions

View File

@ -0,0 +1,112 @@
"""
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