from pydantic import BaseModel, Field from typing import List, Optional, Dict, Any class CoinInfo(BaseModel): availableToBorrow: Optional[str] = Field(None, description="Amount available to borrow") bonus: Optional[str] = Field(None, description="Bonus amount") accruedInterest: Optional[str] = Field(None, description="Accrued interest") availableToWithdraw: Optional[str] = Field(None, description="Amount available to withdraw") totalOrderIM: Optional[str] = Field(None, description="Initial margin for orders") equity: Optional[str] = Field(None, description="Total coin equity") totalPositionMM: Optional[str] = Field(None, description="Maintenance margin for positions") usdValue: Optional[str] = Field(None, description="USD value of the coin") unrealisedPnl: Optional[str] = Field(None, description="Unrealized PnL") collateralSwitch: Optional[bool] = Field(None, description="Is used as collateral") spotHedgingQty: Optional[str] = Field(None, description="Spot hedging quantity") borrowAmount: Optional[str] = Field(None, description="Borrowed amount") totalPositionIM: Optional[str] = Field(None, description="Initial margin for positions") walletBalance: Optional[str] = Field(None, description="Coin wallet balance") cumRealisedPnl: Optional[str] = Field(None, description="Cumulative realized PnL") locked: Optional[str] = Field(None, description="Locked amount") marginCollateral: Optional[bool] = Field(None, description="Is used as margin collateral") coin: str = Field(..., description="Coin symbol") class AccountInfo(BaseModel): totalEquity: str = Field(..., description="Total equity in USD") accountIMRate: str = Field(..., description="Initial margin rate") totalMarginBalance: str = Field(..., description="Total margin balance") totalInitialMargin: str = Field(..., description="Total initial margin") accountType: str = Field(..., description="Account type (e.g. UNIFIED)") totalAvailableBalance: str = Field(..., description="Total available balance") accountMMRate: str = Field(..., description="Maintenance margin rate") totalPerpUPL: str = Field(..., description="Unrealized PnL of perpetual positions") totalWalletBalance: str = Field(..., description="Total wallet balance") accountLTV: str = Field(..., description="Loan to value") totalMaintenanceMargin: str = Field(..., description="Total maintenance margin") coin: List[CoinInfo] = Field(..., description="List of coins") class ResultInfo(BaseModel): list: List[AccountInfo] = Field(..., description="List of accounts") class AccountResponseSchema(BaseModel): retCode: int = Field(..., description="Return code (0 means success)") retMsg: str = Field(..., description="Return message") result: ResultInfo = Field(..., description="Detailed result") retExtInfo: Dict[str, Any] = Field(..., description="Extra information") time: int = Field(..., description="Response timestamp")