"""赎回相关 DTO。""" from decimal import Decimal from pydantic import BaseModel, Field, field_serializer from schemas.holdings import HoldingResp class RedeemReq(BaseModel): """赎回入参。shares 为正数(份额),按净值折算入账金额。""" product_id: int shares: Decimal = Field(gt=0) class RedeemResp(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