From 99c3470137ca2c2f5fce9c499647113219c2594f Mon Sep 17 00:00:00 2001 From: oppiliappan Date: Tue, 17 Jun 2025 11:21:07 +0100 Subject: [PATCH] appview/repo: add new spindles to consumer as they are ingested Change-Id: xkrymszrptszoxyyqurntvnnkvtzwvus Signed-off-by: oppiliappan --- appview/ingester.go | 22 +++++++++++++++++----- appview/repo/repo.go | 41 ++++++++++++++++++++++++++--------------- appview/state/router.go | 2 +- 3 files changed, 44 insertions(+), 21 deletions(-) diff --git a/appview/ingester.go b/appview/ingester.go index 8d078ea..1dcd721 100644 --- a/appview/ingester.go +++ b/appview/ingester.go @@ -294,7 +294,7 @@ func ingestProfile(d *db.DbWrapper, e *models.Event) error { return nil } -func ingestSpindleMember(d *db.DbWrapper, e *models.Event, enforcer *rbac.Enforcer) error { +func ingestSpindleMember(_ *db.DbWrapper, e *models.Event, enforcer *rbac.Enforcer) error { did := e.Did var err error @@ -338,21 +338,33 @@ func ingestSpindle(d *db.DbWrapper, e *models.Event, dev bool) error { } // this is a special record whose rkey is the instance of the spindle itself - domain := e.Commit.RKey + instance := e.Commit.RKey - owner, err := fetchOwner(context.TODO(), domain, true) + owner, err := fetchOwner(context.TODO(), instance, dev) if err != nil { - log.Printf("failed to verify owner of %s: %w", domain, err) + log.Printf("failed to verify owner of %s: %s", instance, err) return err } // verify that the spindle owner points back to this did if owner != did { - log.Printf("incorrect owner for domain: %s, %s != %s", domain, owner, did) + log.Printf("incorrect owner for domain: %s, %s != %s", instance, owner, did) return err } // mark this spindle as registered + ddb, ok := d.Execer.(*db.DB) + if !ok { + return fmt.Errorf("failed to index profile record, invalid db cast") + } + + _, err = db.VerifySpindle( + ddb, + db.FilterEq("owner", did), + db.FilterEq("instance", instance), + ) + + return err } return nil diff --git a/appview/repo/repo.go b/appview/repo/repo.go index 4ee8504..695de1e 100644 --- a/appview/repo/repo.go +++ b/appview/repo/repo.go @@ -1,6 +1,7 @@ package repo import ( + "context" "database/sql" "encoding/json" "errors" @@ -27,6 +28,7 @@ import ( "tangled.sh/tangled.sh/core/appview/pages/markup" "tangled.sh/tangled.sh/core/appview/pages/repoinfo" "tangled.sh/tangled.sh/core/appview/reporesolver" + "tangled.sh/tangled.sh/core/eventconsumer" "tangled.sh/tangled.sh/core/knotclient" "tangled.sh/tangled.sh/core/patchutil" "tangled.sh/tangled.sh/core/rbac" @@ -42,20 +44,22 @@ import ( ) type Repo struct { - repoResolver *reporesolver.RepoResolver - idResolver *idresolver.Resolver - config *config.Config - oauth *oauth.OAuth - pages *pages.Pages - db *db.DB - enforcer *rbac.Enforcer - posthog posthog.Client + repoResolver *reporesolver.RepoResolver + idResolver *idresolver.Resolver + config *config.Config + oauth *oauth.OAuth + pages *pages.Pages + spindlestream *eventconsumer.Consumer + db *db.DB + enforcer *rbac.Enforcer + posthog posthog.Client } func New( oauth *oauth.OAuth, repoResolver *reporesolver.RepoResolver, pages *pages.Pages, + spindlestream *eventconsumer.Consumer, idResolver *idresolver.Resolver, db *db.DB, config *config.Config, @@ -63,13 +67,14 @@ func New( enforcer *rbac.Enforcer, ) *Repo { return &Repo{oauth: oauth, - repoResolver: repoResolver, - pages: pages, - idResolver: idResolver, - config: config, - db: db, - posthog: posthog, - enforcer: enforcer, + repoResolver: repoResolver, + pages: pages, + idResolver: idResolver, + config: config, + spindlestream: spindlestream, + db: db, + posthog: posthog, + enforcer: enforcer, } } @@ -831,6 +836,12 @@ func (rp *Repo) EditSpindle(w http.ResponseWriter, r *http.Request) { return } + // add this spindle to spindle stream + rp.spindlestream.AddSource( + context.Background(), + eventconsumer.NewSpindleSource(newSpindle), + ) + w.Write(fmt.Append(nil, "spindle set to: ", newSpindle)) } diff --git a/appview/state/router.go b/appview/state/router.go index 6eeb6d4..9825105 100644 --- a/appview/state/router.go +++ b/appview/state/router.go @@ -199,6 +199,6 @@ func (s *State) PullsRouter(mw *middleware.Middleware) http.Handler { } func (s *State) RepoRouter(mw *middleware.Middleware) http.Handler { - repo := repo.New(s.oauth, s.repoResolver, s.pages, s.idResolver, s.db, s.config, s.posthog, s.enforcer) + repo := repo.New(s.oauth, s.repoResolver, s.pages, s.spindlestream, s.idResolver, s.db, s.config, s.posthog, s.enforcer) return repo.Router(mw) } -- 2.43.0