from typing import Generic, TypeVar from fastapi import Query from pydantic import BaseModel from .config import get_settings T = TypeVar("T") class Page(BaseModel, Generic[T]): total: int limit: int offset: int items: list[T] class PageParams: """Reusable dependency for `?limit=&offset=` with env-configured caps.""" def __init__( self, limit: int = Query(default=None, ge=1, description="Max rows to return"), offset: int = Query(default=0, ge=0, description="Rows to skip"), ): settings = get_settings() if limit is None: limit = settings.default_limit self.limit = min(limit, settings.max_limit) self.offset = offset