youtube-summarizer/backend/models/api_models.py

48 lines
1.1 KiB
Python

"""Common API models and response schemas."""
from pydantic import BaseModel
from typing import Optional, Dict, Any, List
from datetime import datetime
class BaseResponse(BaseModel):
"""Base response model for all API responses."""
success: bool = True
message: Optional[str] = None
data: Optional[Dict[str, Any]] = None
errors: Optional[List[str]] = None
timestamp: datetime = datetime.utcnow()
class Config:
json_encoders = {
datetime: lambda v: v.isoformat()
}
class ErrorResponse(BaseModel):
"""Error response model."""
error: str
message: str
code: Optional[str] = None
details: Optional[Dict[str, Any]] = None
class SuccessResponse(BaseModel):
"""Success response model."""
message: str
data: Optional[Dict[str, Any]] = None
class PaginationParams(BaseModel):
"""Pagination parameters."""
page: int = 1
page_size: int = 10
total: Optional[int] = None
total_pages: Optional[int] = None
class PaginatedResponse(BaseModel):
"""Paginated response model."""
items: List[Any]
pagination: PaginationParams
success: bool = True