"""统一响应格式封装""" from typing import Any, Optional, Generic, TypeVar from pydantic import BaseModel from datetime import datetime T = TypeVar("T") class ApiResponse(BaseModel, Generic[T]): """统一 API 响应格式""" code: int = 0 message: str = "success" data: Optional[T] = None timestamp: str = "" def __init__(self, code: int = 0, message: str = "success", data: T = None, **kwargs): super().__init__( code=code, message=message, data=data, timestamp=datetime.now().isoformat() + "Z" ) @classmethod def success(cls, data: T = None, message: str = "success"): return cls(code=0, message=message, data=data) @classmethod def error(cls, code: int = 50000, message: str = "Internal error"): return cls(code=code, message=message, data=None) class PaginatedData(BaseModel, Generic[T]): """分页数据封装""" items: list[T] total: int page: int page_size: int total_pages: int pagination: dict @classmethod def create(cls, items: list, page: int = 1, page_size: int = 20, total: int = 0): total_pages = (total + page_size - 1) // page_size if page_size > 0 else 0 return cls( items=items, total=total, page=page, page_size=page_size, total_pages=total_pages, pagination={ "page": page, "page_size": page_size, "total": total, "total_pages": total_pages } )