"""资金账户相关 DTO。 金额统一序列化为两位小数字符串(如 "48000.00"),避免 JSON number 的浮点精度隐患。 """ from datetime import datetime from decimal import Decimal from typing import Literal from pydantic import BaseModel, Field, field_serializer class BalanceResp(BaseModel): """用户余额响应体。available_balance = balance - frozen_amount,由 service 派生。""" customer_id: int balance: Decimal available_balance: Decimal frozen_amount: Decimal currency: str status: str update_time: datetime | None = None @field_serializer("balance", "available_balance", "frozen_amount") def _fmt_money(self, value: Decimal) -> str: return f"{value:.2f}" class AdjustReq(BaseModel): """加减余额入参。amount 为正数(元),direction 决定加/减。""" direction: Literal["add", "sub"] = Field( ..., description="add=入账(充值),sub=出账(提现)" ) amount: Decimal = Field(gt=0)