Files
blog-service/schemas/pagination.py
2025-09-23 15:13:29 +08:00

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