diff --git a/internal/data/imarket.go b/internal/data/imarket.go index 708a77d..a7d8a21 100644 --- a/internal/data/imarket.go +++ b/internal/data/imarket.go @@ -17,5 +17,5 @@ type IMarket interface { // Trading pair methods IsSpotPair(symbol string) bool IsFuturesPair(symbol string) bool - RefreshTradingPairCache() + RefreshTradingPairCache() error } diff --git a/internal/data/market/main.go b/internal/data/market/main.go index f6a4eee..df1418d 100644 --- a/internal/data/market/main.go +++ b/internal/data/market/main.go @@ -36,6 +36,9 @@ func NewMarketData() *MarketData { futuresClient: futures.NewClient("", ""), } + if err := ms.refreshTradingPairCache(); err != nil { + log.Error().Err(err).Msg("Failed initial trading pair cache load") + } go ms.pairCacheRefreshLoop() go ms.alphaCacheRefreshLoop() diff --git a/internal/data/market/trading_pairs.go b/internal/data/market/trading_pairs.go index 230b1c5..a064a9b 100644 --- a/internal/data/market/trading_pairs.go +++ b/internal/data/market/trading_pairs.go @@ -7,20 +7,20 @@ import ( "github.com/rs/zerolog/log" ) -func (ms *MarketData) refreshTradingPairCache() { +func (ms *MarketData) refreshTradingPairCache() error { ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second) defer cancel() spotInfo, err := ms.spotClient.NewExchangeInfoService().Do(ctx) if err != nil { log.Error().Err(err).Msg("Failed to fetch spot exchange info") - return + return err } futuresInfo, err := ms.futuresClient.NewExchangeInfoService().Do(ctx) if err != nil { log.Error().Err(err).Msg("Failed to fetch futures exchange info") - return + return err } ms.pairCacheMutex.Lock() @@ -45,6 +45,7 @@ func (ms *MarketData) refreshTradingPairCache() { Int("spot", len(ms.spotPairs)). Int("futures", len(ms.futuresPairs)). Msg("Trading pair cache refreshed") + return nil } func (ms *MarketData) pairCacheRefreshLoop() { @@ -68,6 +69,6 @@ func (ms *MarketData) IsFuturesPair(symbol string) bool { return ms.futuresPairs[symbol] } -func (ms *MarketData) RefreshTradingPairCache() { - ms.refreshTradingPairCache() +func (ms *MarketData) RefreshTradingPairCache() error { + return ms.refreshTradingPairCache() } diff --git a/internal/services/tele/commands/market.go b/internal/services/tele/commands/market.go index 9e8e1b9..319a3c8 100644 --- a/internal/services/tele/commands/market.go +++ b/internal/services/tele/commands/market.go @@ -23,10 +23,12 @@ func OnGetTopFundingFee(context telebot.Context) error { } func OnRefreshPairCache(context telebot.Context) error { - adminID, _ := strconv.ParseInt(os.Getenv(key.AdminChatID), 10, 64) - if adminID != 0 && context.Sender().ID != adminID { + adminID, err := strconv.ParseInt(os.Getenv(key.AdminChatID), 10, 64) + if err != nil || adminID == 0 || context.Sender().ID != adminID { return nil } - data.Market.RefreshTradingPairCache() + if err := data.Market.RefreshTradingPairCache(); err != nil { + return chat.ReplyMessage(context, "Failed to refresh trading pair cache") + } return chat.ReplyMessage(context, "Trading pair cache refreshed") }