Files
assetx/webapp-back/lending/tokens.go

81 lines
1.7 KiB
Go
Raw Normal View History

package lending
import (
"net/http"
"strconv"
"github.com/gin-gonic/gin"
)
// GetTokensInfo returns information about all supported tokens
// GET /api/lending/tokens?chain_id=97
func GetTokensInfo(c *gin.Context) {
chainId := parseChainID(c)
stablecoins, err := GetAllStablecoins(chainId)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{
"success": false,
"error": "failed to fetch stablecoins",
})
return
}
ytTokens, err := GetAllYTTokens(chainId)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{
"success": false,
"error": "failed to fetch YT tokens",
})
return
}
allTokens := make([]TokenInfo, 0, len(stablecoins)+len(ytTokens))
allTokens = append(allTokens, stablecoins...)
allTokens = append(allTokens, ytTokens...)
c.JSON(http.StatusOK, gin.H{
"success": true,
"data": gin.H{
"stablecoins": stablecoins,
"yt_tokens": ytTokens,
"all_tokens": allTokens,
},
})
}
// GetTokenInfo returns information about a specific token
// GET /api/lending/tokens/:assetCode?chain_id=97
func GetTokenInfo(c *gin.Context) {
assetCode := c.Param("assetCode")
chainId := parseChainID(c)
info, err := GetTokenInfoFromDB(assetCode)
if err != nil {
c.JSON(http.StatusNotFound, gin.H{
"success": false,
"error": "token not found",
})
return
}
info.Decimals = resolveDecimals(info.ContractAddress, chainId, info.Decimals)
c.JSON(http.StatusOK, gin.H{
"success": true,
"data": info,
})
}
// parseChainID reads chain_id from query string, returns 0 if not provided
func parseChainID(c *gin.Context) int {
s := c.Query("chain_id")
if s == "" {
return 0
}
id, err := strconv.Atoi(s)
if err != nil {
return 0
}
return id
}