31 lines
851 B
Python
31 lines
851 B
Python
"""申购相关 DTO。"""
|
|
from decimal import Decimal
|
|
|
|
from pydantic import BaseModel, Field, field_serializer
|
|
|
|
from schemas.holdings import HoldingResp
|
|
|
|
|
|
class PurchaseReq(BaseModel):
|
|
"""申购入参。amount 为正数(元),按净值折算份额。"""
|
|
|
|
product_id: int
|
|
amount: Decimal = Field(gt=0)
|
|
|
|
|
|
class PurchaseResp(BaseModel):
|
|
"""申购结果:order_no + status(已确认 / 风控挂起)。
|
|
|
|
已确认时返回最新余额 + 该产品持仓;风控挂起时账户/持仓不变,仅返回预警关联。
|
|
"""
|
|
|
|
order_no: str
|
|
status: str
|
|
balance: Decimal | None = None
|
|
holding: HoldingResp | None = None
|
|
alert_id: int | None = None
|
|
|
|
@field_serializer("balance")
|
|
def _fmt_balance(self, value: Decimal | None) -> str | None:
|
|
return f"{value:.2f}" if value is not None else None
|