from typing import Optional, Generic, List, TypeVar
from pydantic import BaseModel, ConfigDict

T = TypeVar("T")

class ListQueryParams(BaseModel):
    page: int = 1
    limit: int = 10
    search: Optional[str] = None
    sort_by: Optional[str] = "created_at"
    order: Optional[str] = "desc"

    model_config = ConfigDict(extra="ignore")

class PaginatedResponse(BaseModel, Generic[T]):
    total: int
    page: int
    limit: int
    items: List[T]

    model_config = ConfigDict(from_attributes=True, extra="ignore")
