diff --git a/pkg/entities/defi.go b/pkg/entities/defi.go index a7e15652..97867e53 100644 --- a/pkg/entities/defi.go +++ b/pkg/entities/defi.go @@ -55,13 +55,17 @@ func (e *Entity) GetHistoricalMarketChart(req *request.GetMarketChartRequest) (* data, err := e.svc.GeckoTerminal.GetHistoricalMarketData(nerwork, poolAddr, now.Unix()) if err != nil { - return nil, err, 500 + if errors.Is(err, baseerrs.ErrTokenNotSupportedYet) { + return nil, err, http.StatusUnprocessableEntity + } + e.log.Fields(logger.Fields{"req": req}).Error(err, "[entity.GetHistoricalMarketChart] svc.GeckoTerminal.GetHistoricalMarketData() failed") + return nil, err, http.StatusInternalServerError } - resp = data default: data, err, statusCode := e.svc.CoinGecko.GetHistoricalMarketData(req.CoinID, req.Currency, req.Days) if err != nil { + e.log.Fields(logger.Fields{"req": req}).Error(err, "[entity.GetHistoricalMarketChart] svc.CoinGecko.GetHistoricalMarketData() failed") return nil, err, statusCode } @@ -69,6 +73,11 @@ func (e *Entity) GetHistoricalMarketChart(req *request.GetMarketChartRequest) (* } data := &response.CoinPriceHistoryResponse{} + + if len(resp.Prices) == 0 { + return data, nil, http.StatusOK + } + for _, p := range resp.Prices { timestamp := time.UnixMilli(int64(p[0])).Format("01-02") data.Times = append(data.Times, timestamp) diff --git a/pkg/model/errors/validator.go b/pkg/model/errors/validator.go index 91a83183..aa1e9062 100644 --- a/pkg/model/errors/validator.go +++ b/pkg/model/errors/validator.go @@ -37,4 +37,5 @@ var ( ErrInvalidCoingeckoSvcParam = NewStringError("Invalid parameter", 400) ErrFriendTechKeyAlreadyTracked = NewStringError("Friend tech key already tracked", 409) ErrFriendTechKeyNotTrackedYet = NewStringError("Friend tech key not tracked yet", 409) + ErrTokenNotSupportedYet = NewStringError("Token not supported yet", 422) ) diff --git a/pkg/service/geckoterminal/geckoterminal.go b/pkg/service/geckoterminal/geckoterminal.go index 992cc47e..f9d11c44 100644 --- a/pkg/service/geckoterminal/geckoterminal.go +++ b/pkg/service/geckoterminal/geckoterminal.go @@ -6,11 +6,13 @@ import ( "net/url" "strconv" - "github.com/defipod/mochi/pkg/config" - "github.com/defipod/mochi/pkg/response" "github.com/go-rod/rod" "github.com/go-rod/rod/lib/launcher" "github.com/go-rod/stealth" + + "github.com/defipod/mochi/pkg/config" + "github.com/defipod/mochi/pkg/model/errors" + "github.com/defipod/mochi/pkg/response" ) const ( @@ -236,6 +238,10 @@ func (g *GeckoTerminal) GetHistoricalMarketData(network, poolAddr string, before return nil, err } + if len(candlesticks.Data.Attributes.OhlcvList) == 0 { + return nil, errors.ErrTokenNotSupportedYet + } + prices := [][]float64{} marketCaps := [][]float64{} diff --git a/pkg/service/geckoterminal/model.go b/pkg/service/geckoterminal/model.go index 91c874f0..07a6f179 100644 --- a/pkg/service/geckoterminal/model.go +++ b/pkg/service/geckoterminal/model.go @@ -164,3 +164,12 @@ type CandlestickData struct { type CandlestickAttributes struct { OhlcvList [][]float64 `json:"ohlcv_list"` } + +type ErrorResp struct { + Errors []Error `json:"errors"` +} + +type Error struct { + Status string `json:"status"` + Title string `json:"title"` +}