42 lines
1.1 KiB
Python
42 lines
1.1 KiB
Python
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 |