Monorepo for Tangled
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

appvie/notify: add DeleteRepo event

to unindex repos when deleted. this changeset also includes a tweak to
the NewRepo event, to fix a bug with the document IDs of new repos (it
was always zero).

Signed-off-by: oppiliappan <me@oppi.li>

+46 -4
+7 -1
appview/db/repos.go
··· 417 417 if repo.RepoDid != "" { 418 418 repoDid = &repo.RepoDid 419 419 } 420 - _, err := tx.Exec( 420 + result, err := tx.Exec( 421 421 `insert into repos 422 422 (did, name, knot, rkey, at_uri, description, website, topics, source, repo_did) 423 423 values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, ··· 426 426 if err != nil { 427 427 return fmt.Errorf("failed to insert repo: %w", err) 428 428 } 429 + 430 + id, err := result.LastInsertId() 431 + if err != nil { 432 + return fmt.Errorf("failed to get last insert id: %w", err) 433 + } 434 + repo.Id = id 429 435 430 436 for _, dl := range repo.Labels { 431 437 if err := SubscribeLabel(tx, &models.RepoLabel{
+10 -1
appview/indexer/notifier.go
··· 105 105 } 106 106 107 107 func (ix *Indexer) NewRepo(ctx context.Context, repo *models.Repo) { 108 - l := log.FromContext(ctx).With("notifier", "indexer", "repo", repo) 108 + l := log.FromContext(ctx).With("notifier", "indexer", "repo", repo.RepoIdentifier(), "owner", repo.Did, "name", repo.Name) 109 109 l.Debug("indexing new repo") 110 110 err := ix.Repos.Index(ctx, *repo) 111 + if err != nil { 112 + l.Error("failed to index a repo", "err", err) 113 + } 114 + } 115 + 116 + func (ix *Indexer) DeleteRepo(ctx context.Context, repo *models.Repo) { 117 + l := log.FromContext(ctx).With("notifier", "indexer", "repo", repo) 118 + l.Debug("deleting repo from index") 119 + err := ix.Repos.Delete(ctx, repo.Id) 111 120 if err != nil { 112 121 l.Error("failed to index a repo", "err", err) 113 122 }
+3
appview/notify/db/db.go
··· 36 36 func (n *databaseNotifier) NewRepo(ctx context.Context, repo *models.Repo) { 37 37 // no-op for now 38 38 } 39 + func (n *databaseNotifier) DeleteRepo(ctx context.Context, repo *models.Repo) { 40 + // no-op for now 41 + } 39 42 40 43 func (n *databaseNotifier) NewStar(ctx context.Context, star *models.Star) { 41 44 l := log.FromContext(ctx)
+5
appview/notify/logging/notifier.go
··· 26 26 l.inner.NewRepo(ctx, repo) 27 27 } 28 28 29 + func (l *loggingNotifier) DeleteRepo(ctx context.Context, repo *models.Repo) { 30 + ctx = tlog.IntoContext(ctx, tlog.SubLogger(l.logger, "DeleteRepo")) 31 + l.inner.DeleteRepo(ctx, repo) 32 + } 33 + 29 34 func (l *loggingNotifier) NewStar(ctx context.Context, star *models.Star) { 30 35 ctx = tlog.IntoContext(ctx, tlog.SubLogger(l.logger, "NewStar")) 31 36 l.inner.NewStar(ctx, star)
+4
appview/notify/merged_notifier.go
··· 34 34 m.fanout(func(n Notifier) { n.NewRepo(ctx, repo) }) 35 35 } 36 36 37 + func (m *mergedNotifier) DeleteRepo(ctx context.Context, repo *models.Repo) { 38 + m.fanout(func(n Notifier) { n.DeleteRepo(ctx, repo) }) 39 + } 40 + 37 41 func (m *mergedNotifier) NewStar(ctx context.Context, star *models.Star) { 38 42 m.fanout(func(n Notifier) { n.NewStar(ctx, star) }) 39 43 }
+3 -1
appview/notify/notifier.go
··· 9 9 10 10 type Notifier interface { 11 11 NewRepo(ctx context.Context, repo *models.Repo) 12 + DeleteRepo(ctx context.Context, repo *models.Repo) 12 13 13 14 NewStar(ctx context.Context, star *models.Star) 14 15 DeleteStar(ctx context.Context, star *models.Star) ··· 44 45 45 46 var _ Notifier = &BaseNotifier{} 46 47 47 - func (m *BaseNotifier) NewRepo(ctx context.Context, repo *models.Repo) {} 48 + func (m *BaseNotifier) NewRepo(ctx context.Context, repo *models.Repo) {} 49 + func (m *BaseNotifier) DeleteRepo(ctx context.Context, repo *models.Repo) {} 48 50 49 51 func (m *BaseNotifier) NewStar(ctx context.Context, star *models.Star) {} 50 52 func (m *BaseNotifier) DeleteStar(ctx context.Context, star *models.Star) {}
+1
appview/repo/repo.go
··· 940 940 return 941 941 } 942 942 943 + rp.notifier.DeleteRepo(r.Context(), f) 943 944 rp.pages.HxRedirect(w, fmt.Sprintf("/%s", f.Did)) 944 945 } 945 946
+13 -1
appview/state/search.go
··· 47 47 var resultCount int 48 48 var searchDuration time.Duration 49 49 var docCount int64 50 + method := "bleve" 50 51 51 - if searchOpts.HasSearchFilters() || sortField != "" { 52 + if searchOpts.HasSearchFilters() || sortParam != "" { 52 53 res, err := s.indexer.Repos.Search(r.Context(), searchOpts) 53 54 if err != nil { 54 55 l.Error("failed to search repos", "err", err) ··· 87 88 docCount = int64(dc) 88 89 89 90 } else { 91 + method = "db" 90 92 repos, err = db.GetReposPaginated( 91 93 s.db, 92 94 page, ··· 109 111 resultCount = int(rc) 110 112 docCount = int64(rc) 111 113 } 114 + 115 + l.Info( 116 + "RepoSearch", 117 + "method", method, 118 + "resultCount", resultCount, 119 + "docCount", docCount, 120 + "time", searchDuration, 121 + "filterQuery", query.String(), 122 + "sortParam", sortParam, 123 + ) 112 124 113 125 err = s.pages.SearchRepos(w, pages.SearchReposParams{ 114 126 LoggedInUser: s.oauth.GetMultiAccountUser(r),