diff --git a/apps/api/internal/service/cdi.go b/apps/api/internal/service/cdi.go index 5d592ba..85f0603 100644 --- a/apps/api/internal/service/cdi.go +++ b/apps/api/internal/service/cdi.go @@ -106,7 +106,7 @@ func (s *CDIYieldService) ApplyYield(ctx context.Context, a *model.Account) erro log.Printf("[cdi] account=%d calling BCB for [%s, %s]", a.ID, startDate, yesterday) rates, err := s.fetchCDIRates(startDate, yesterday) if err != nil { - log.Printf("[cdi] account=%d BCB error: %v", a.ID, err) + log.Printf("[cdi] account=%d BCB unreachable: %v", a.ID, err) return nil } log.Printf("[cdi] account=%d BCB returned %d rates", a.ID, len(rates)) @@ -192,6 +192,7 @@ func (s *CDIYieldService) fetchCDIRates(startDate, endDate string) ([]bcbEntry, resp, err := s.client.Get(url) if err != nil { + // sem conectividade — não cachear, tentar na próxima request return nil, err } defer resp.Body.Close() @@ -201,7 +202,11 @@ func (s *CDIYieldService) fetchCDIRates(startDate, endDate string) ([]bcbEntry, Valor string `json:"valor"` } if err := json.NewDecoder(resp.Body).Decode(&raw); err != nil { - return nil, err + // BCB retornou objeto de erro em vez de array (dado ainda não publicado) + // cachear resultado vazio até fim do dia para não bater no BCB a cada request + log.Printf("[cdi] BCB decode error para [%s, %s]: %v — cacheando vazio até 23:59", startDate, endDate, err) + s.cache.put(nil, startDate, endDate) + return nil, nil } var entries []bcbEntry