48 lines
1.1 KiB
Python
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 |