35 lines
1018 B
Python
35 lines
1018 B
Python
"""资金账户相关 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)
|