package lending // UserPosition represents user's lending position (from chain) type UserPosition struct { UserAddress string `json:"user_address"` WalletAddress string `json:"wallet_address"` SuppliedBalance string `json:"supplied_balance"` // USDC supplied SuppliedBalanceUSD float64 `json:"supplied_balance_usd"` // USD value BorrowedBalance string `json:"borrowed_balance"` // USDC borrowed BorrowedBalanceUSD float64 `json:"borrowed_balance_usd"` // USD value CollateralBalances map[string]CollateralInfo `json:"collateral_balances"` // YT-A, YT-B, YT-C HealthFactor float64 `json:"health_factor"` LTV float64 `json:"ltv"` // Loan-to-Value ratio SupplyAPY float64 `json:"supply_apy"` BorrowAPY float64 `json:"borrow_apy"` } // CollateralInfo represents collateral asset information type CollateralInfo struct { TokenSymbol string `json:"token_symbol"` // YT-A, YT-B, YT-C Balance string `json:"balance"` // Token balance BalanceUSD float64 `json:"balance_usd"` // USD value CollateralValue float64 `json:"collateral_value"` // Collateral value (with factor) } // LendingStats represents lending market statistics type LendingStats struct { TotalSuppliedUSD float64 `json:"total_supplied_usd"` TotalBorrowedUSD float64 `json:"total_borrowed_usd"` TotalCollateralUSD float64 `json:"total_collateral_usd"` UtilizationRate float64 `json:"utilization_rate"` AvgSupplyAPY float64 `json:"avg_supply_apy"` AvgBorrowAPY float64 `json:"avg_borrow_apy"` TotalUsers int `json:"total_users"` ActiveBorrowers int `json:"active_borrowers"` TotalTVL float64 `json:"total_tvl"` } // Supply request/response type SupplyRequest struct { Amount string `json:"amount" binding:"required"` TxHash string `json:"tx_hash"` } type SupplyResponse struct { Success bool `json:"success"` Message string `json:"message"` Data *UserPosition `json:"data,omitempty"` } // Withdraw request/response type WithdrawRequest struct { Amount string `json:"amount" binding:"required"` TxHash string `json:"tx_hash"` } type WithdrawResponse struct { Success bool `json:"success"` Message string `json:"message"` Data *UserPosition `json:"data,omitempty"` } // SupplyCollateral request/response type SupplyCollateralRequest struct { Asset string `json:"asset" binding:"required"` // YT-A, YT-B, YT-C Amount string `json:"amount" binding:"required"` TxHash string `json:"tx_hash"` } type SupplyCollateralResponse struct { Success bool `json:"success"` Message string `json:"message"` Data *UserPosition `json:"data,omitempty"` } // WithdrawCollateral request/response type WithdrawCollateralRequest struct { Asset string `json:"asset" binding:"required"` // YT-A, YT-B, YT-C Amount string `json:"amount" binding:"required"` TxHash string `json:"tx_hash"` } type WithdrawCollateralResponse struct { Success bool `json:"success"` Message string `json:"message"` Data *UserPosition `json:"data,omitempty"` } // Borrow request/response type BorrowRequest struct { Amount string `json:"amount" binding:"required"` TxHash string `json:"tx_hash"` } type BorrowResponse struct { Success bool `json:"success"` Message string `json:"message"` Data *UserPosition `json:"data,omitempty"` } // Repay request/response type RepayRequest struct { Amount string `json:"amount" binding:"required"` TxHash string `json:"tx_hash"` } type RepayResponse struct { Success bool `json:"success"` Message string `json:"message"` Data *UserPosition `json:"data,omitempty"` }