from typing import Generic, TypeVar, Optional, List from pydantic import BaseModel, Field T = TypeVar("T") class ResponseModel(BaseModel, Generic[T]): code: int = 200 message: str = "success" data: Optional[T] = None class ListResponse(BaseModel, Generic[T]): code: int = 200 message: str = "success" data: List[T] = [] total: int = 0 page: int = 1 page_size: int = 20 class PageParams(BaseModel): page: int = Field(1, ge=1) page_size: int = Field(20, ge=1, le=500) keyword: Optional[str] = None