first
This commit is contained in:
45
app/schemas/common.py
Normal file
45
app/schemas/common.py
Normal file
@@ -0,0 +1,45 @@
|
||||
from pydantic import BaseModel, Field
|
||||
from typing import Optional, Generic, TypeVar, List
|
||||
from datetime import datetime
|
||||
|
||||
T = TypeVar('T')
|
||||
|
||||
|
||||
class BaseSchema(BaseModel):
|
||||
"""Базовый класс для всех схем"""
|
||||
|
||||
class Config:
|
||||
from_attributes = True
|
||||
json_encoders = {
|
||||
datetime: lambda v: v.isoformat()
|
||||
}
|
||||
|
||||
|
||||
class PaginationParams(BaseModel):
|
||||
"""Параметры пагинации"""
|
||||
page: int = Field(1, ge=1, description="Номер страницы")
|
||||
per_page: int = Field(20, ge=1, le=100, description="Записей на странице")
|
||||
order_by: Optional[str] = Field(None, description="Поле для сортировки")
|
||||
descending: bool = Field(True, description="По убыванию")
|
||||
|
||||
|
||||
class PaginatedResponse(BaseSchema, Generic[T]):
|
||||
"""Ответ с пагинацией"""
|
||||
items: List[T]
|
||||
total: int
|
||||
page: int
|
||||
per_page: int
|
||||
pages: int
|
||||
|
||||
|
||||
class MessageResponse(BaseSchema):
|
||||
"""Простой ответ с сообщением"""
|
||||
message: str
|
||||
success: bool = True
|
||||
|
||||
|
||||
class ErrorResponse(BaseSchema):
|
||||
"""Ответ с ошибкой"""
|
||||
error: str
|
||||
detail: Optional[str] = None
|
||||
status_code: int
|
||||
Reference in New Issue
Block a user