from typing import List, TypeVar, Generic from pydantic import BaseModel, field_validator class PaginationParams(BaseModel): currentPage: int = 1 # 当前页码,从 1 开始 pageSize: int = 10 # 每页数据量 class Config: validate_assignment = True @field_validator("pageSize") def limit_page_size(cls, v): if v > 100: raise ValueError("pageSize 最大为 100") return v T = TypeVar("T") class PageResult(BaseModel, Generic[T]): """通用分页结果模型""" current: int = 1 # 当前页码(从 1 开始) size: int = 10 # 每页大小 total: int = 0 # 总记录数 pages: int = 0 # 总页数 records: List[T] = [] # 数据列表 @field_validator("size") def validate_page_size(cls, v): if v < 1: raise ValueError("page_size 必须至少为 1") if v > 1000: raise ValueError("page_size 最大为 1000") return v @property def offset(self) -> int: """计算偏移量""" return (self.page - 1) * self.size