Files
shanxia2.0/backend/app/schemas/bx/common.py
T
2026-06-21 09:19:07 +08:00

55 lines
1.5 KiB
Python

"""bx 原系统 API 响应包装(code=0 / msg / data.rows),与门户 success_response 分离。"""
from datetime import date, datetime
from typing import Annotated, Generic, List, Optional, TypeVar
from pydantic import BaseModel, ConfigDict, PlainSerializer
from pydantic.alias_generators import to_camel
T = TypeVar("T")
def _dt_to_str(v: Optional[datetime]) -> Optional[str]:
if v is None:
return None
return v.strftime("%Y-%m-%d %H:%M:%S")
def _date_to_str(v: Optional[date]) -> Optional[str]:
if v is None:
return None
return v.strftime("%Y-%m-%d")
DatetimeToStr = Annotated[datetime, PlainSerializer(_dt_to_str, return_type=str)]
OptDatetimeToStr = Annotated[Optional[datetime], PlainSerializer(_dt_to_str, return_type=Optional[str])]
DateToStr = Annotated[date, PlainSerializer(_date_to_str, return_type=str)]
OptDateToStr = Annotated[Optional[date], PlainSerializer(_date_to_str, return_type=Optional[str])]
class PagedQuery(BaseModel):
model_config = ConfigDict(populate_by_name=True, alias_generator=to_camel)
page: int = 1
page_size: int = 10
class ApiResponse(BaseModel, Generic[T]):
code: int = 0
msg: str = "success"
data: Optional[T] = None
class PagedData(BaseModel, Generic[T]):
model_config = ConfigDict(populate_by_name=True, alias_generator=to_camel)
rows: List[T]
total: int
page: int
page_size: int
class PagedResponse(BaseModel, Generic[T]):
code: int = 0
msg: str = "success"
data: Optional[PagedData[T]] = None