diff --git a/pkg/feeds/feeds.go b/pkg/feeds/feeds.go index 98f86c1..b8104a4 100644 --- a/pkg/feeds/feeds.go +++ b/pkg/feeds/feeds.go @@ -159,8 +159,14 @@ func (s *Service) BuildFeed(hashID string) ([]byte, error) { var ( logger = log.WithField("hash_id", hashID) now = time.Now().UTC() + errKey = "err/" + hashID ) + cached, err := s.cache.Get(errKey) + if err == nil { + return []byte(cached), nil + } + feed, err := s.QueryFeed(hashID) if err != nil { logger.WithError(err).Error("failed to query feed from dynamodb") @@ -171,7 +177,10 @@ func (s *Service) BuildFeed(hashID string) ([]byte, error) { oldLastID := feed.LastID - const updateTTL = 15 * time.Minute + const ( + updateTTL = 15 * time.Minute + ) + if now.Sub(feed.UpdatedAt) < updateTTL { if podcast, err := s.buildPodcast(feed); err != nil { return nil, err @@ -196,6 +205,9 @@ func (s *Service) BuildFeed(hashID string) ([]byte, error) { if err := builder.Build(feed); err != nil { logger.WithError(err).Error("failed to build feed") + // Save error to cache to avoid requests spamming + _ = s.cache.Set(errKey, err.Error(), updateTTL) + return nil, err }