This commit is contained in:
2026-04-09 19:28:41 +03:00
commit 9fa723bb4c
43 changed files with 2804 additions and 0 deletions

45
app/schemas/common.py Normal file
View 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