From f57408d003e277230b234798e7716398e3798fed Mon Sep 17 00:00:00 2001 From: Bel LaPointe <153096461+breel-render@users.noreply.github.com> Date: Sun, 27 Apr 2025 11:27:47 -0600 Subject: [PATCH] feeds.ForEach --- src/feeds/db.go | 21 +++++++++++++++++++++ src/feeds/db_test.go | 17 ++++++++++++++++- 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/src/feeds/db.go b/src/feeds/db.go index 3fe1342..3448e02 100644 --- a/src/feeds/db.go +++ b/src/feeds/db.go @@ -99,6 +99,27 @@ type ( } ) +func (f *Feeds) ForEach(ctx context.Context, cb func(Feed) error) error { + type id struct { + ID string `json:"id"` + } + ids, err := db.Query[id](ctx, `SELECT id FROM "feed.entries" WHERE deleted_at IS NULL`) + if err != nil { + return err + } + + for _, id := range ids { + feed, err := f.Get(ctx, id.ID) + if err != nil { + return err + } else if err := cb(feed); err != nil { + return err + } + } + + return nil +} + func (f *Feeds) Get(ctx context.Context, id string) (Feed, error) { return db.QueryOne[Feed](ctx, ` WITH diff --git a/src/feeds/db_test.go b/src/feeds/db_test.go index eb47a43..a6eeeb0 100644 --- a/src/feeds/db_test.go +++ b/src/feeds/db_test.go @@ -107,10 +107,25 @@ func TestFeeds(t *testing.T) { if err := f.Executed(ctx, got.Entry.ID, got.Version.Created); err != nil { t.Fatal("cannot executed again:", err) - } else if got3, err := f.Get(ctx, id); err != nil { + } + got3, err := f.Get(ctx, id) + if err != nil { t.Fatal("cannot get w executed again:", err) } else if got2.Execution == got3.Execution { t.Errorf("getting after second execution returned first execution") } + + n := 0 + if err := f.ForEach(ctx, func(feed feeds.Feed) error { + n += 1 + if feed != got3 { + t.Errorf("for each yielded difference than last get") + } + return nil + }); err != nil { + t.Error(err) + } else if n == 0 { + t.Errorf("for each didnt hit known get") + } }) }