diff --git a/app/schemas/common.py b/app/schemas/common.py new file mode 100644 index 0000000..dad3865 --- /dev/null +++ b/app/schemas/common.py @@ -0,0 +1,30 @@ +"""Common Pydantic schemas: pagination.""" + +from __future__ import annotations + +from typing import Generic, List, Optional, TypeVar + +from pydantic import BaseModel, ConfigDict, Field + +T = TypeVar("T") + + +class PaginationParams(BaseModel): + """Standard pagination query params.""" + + skip: int = Field(default=0, ge=0) + limit: int = Field(default=20, ge=1, le=100) + + +class PaginatedResponse(BaseModel, Generic[T]): + """Generic paginated response.""" + + model_config = ConfigDict(from_attributes=True) + + items: List[T] # type: ignore[valid-type] + total: int + skip: int + limit: int + + +__all__ = ["PaginatedResponse", "PaginationParams"]