This repository has no description
0

Configure Feed

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

core / appview / indexer / notifier.go
4.3 kB 145 lines
1package indexer 2 3import ( 4 "context" 5 6 "github.com/bluesky-social/indigo/atproto/syntax" 7 "tangled.org/core/api/tangled" 8 "tangled.org/core/appview/db" 9 "tangled.org/core/appview/models" 10 "tangled.org/core/appview/notify" 11 "tangled.org/core/log" 12 "tangled.org/core/orm" 13) 14 15var _ notify.Notifier = &Indexer{} 16 17func (ix *Indexer) getAndReindexRepo(ctx context.Context, repoAt syntax.ATURI) { 18 l := log.FromContext(ctx).With("notifier", "indexer", "repo_at", repoAt) 19 20 repo, err := db.GetRepo(ix.Db, orm.FilterEq("at_uri", repoAt.String())) 21 if err != nil { 22 l.Error("failed to get repo for reindexing", "err", err) 23 return 24 } 25 26 err = ix.Repos.Index(ctx, *repo) 27 if err != nil { 28 l.Error("failed to reindex repo", "err", err) 29 } 30} 31 32func (ix *Indexer) NewIssue(ctx context.Context, issue *models.Issue, mentions []syntax.DID) { 33 l := log.FromContext(ctx).With("notifier", "indexer", "issue", issue) 34 l.Debug("indexing new issue") 35 36 err := ix.Issues.Index(ctx, *issue) 37 if err != nil { 38 l.Error("failed to index an issue", "err", err) 39 } 40 41 l.Debug("reindexing repo after new issue") 42 ix.getAndReindexRepo(ctx, issue.RepoAt) 43} 44 45func (ix *Indexer) NewIssueState(ctx context.Context, actor syntax.DID, issue *models.Issue) { 46 l := log.FromContext(ctx).With("notifier", "indexer", "issue", issue) 47 l.Debug("updating an issue") 48 err := ix.Issues.Index(ctx, *issue) 49 if err != nil { 50 l.Error("failed to index an issue", "err", err) 51 } 52} 53 54func (ix *Indexer) DeleteIssue(ctx context.Context, issue *models.Issue) { 55 l := log.FromContext(ctx).With("notifier", "indexer", "issue", issue) 56 l.Debug("deleting an issue") 57 58 err := ix.Issues.Delete(ctx, issue.Id) 59 if err != nil { 60 l.Error("failed to delete an issue", "err", err) 61 } 62 63 l.Debug("reindexing repo after issue deletion") 64 ix.getAndReindexRepo(ctx, issue.RepoAt) 65} 66 67func (ix *Indexer) NewIssueLabelOp(ctx context.Context, issue *models.Issue) { 68 l := log.FromContext(ctx).With("notifier", "indexer", "issue", issue) 69 l.Debug("reindexing issue after label change") 70 err := ix.Issues.Index(ctx, *issue) 71 if err != nil { 72 l.Error("failed to index an issue", "err", err) 73 } 74} 75 76func (ix *Indexer) NewPullLabelOp(ctx context.Context, pull *models.Pull) { 77 l := log.FromContext(ctx).With("notifier", "indexer", "pull", pull) 78 l.Debug("reindexing pull after label change") 79 err := ix.Pulls.Index(ctx, pull) 80 if err != nil { 81 l.Error("failed to index a pr", "err", err) 82 } 83} 84 85func (ix *Indexer) NewPull(ctx context.Context, pull *models.Pull) { 86 l := log.FromContext(ctx).With("notifier", "indexer", "pull", pull) 87 l.Debug("indexing new pr") 88 89 err := ix.Pulls.Index(ctx, pull) 90 if err != nil { 91 l.Error("failed to index a pr", "err", err) 92 } 93 94 l.Debug("reindexing repo after new pull") 95 ix.getAndReindexRepo(ctx, pull.RepoAt) 96} 97 98func (ix *Indexer) NewPullState(ctx context.Context, actor syntax.DID, pull *models.Pull) { 99 l := log.FromContext(ctx).With("notifier", "indexer", "pull", pull) 100 l.Debug("updating a pr") 101 err := ix.Pulls.Index(ctx, pull) 102 if err != nil { 103 l.Error("failed to index a pr", "err", err) 104 } 105} 106 107func (ix *Indexer) NewRepo(ctx context.Context, repo *models.Repo) { 108 l := log.FromContext(ctx).With("notifier", "indexer", "repo", repo.RepoIdentifier(), "owner", repo.Did, "name", repo.Name) 109 l.Debug("indexing new repo") 110 err := ix.Repos.Index(ctx, *repo) 111 if err != nil { 112 l.Error("failed to index a repo", "err", err) 113 } 114} 115 116func (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) 120 if err != nil { 121 l.Error("failed to index a repo", "err", err) 122 } 123} 124 125func (ix *Indexer) NewStar(ctx context.Context, star *models.Star) { 126 l := log.FromContext(ctx).With("notifier", "indexer", "star", star) 127 128 if star.RepoAt.Collection().String() != tangled.RepoNSID { 129 return 130 } 131 132 l.Debug("reindexing repo after new star") 133 ix.getAndReindexRepo(ctx, star.RepoAt) 134} 135 136func (ix *Indexer) DeleteStar(ctx context.Context, star *models.Star) { 137 l := log.FromContext(ctx).With("notifier", "indexer", "star", star) 138 139 if star.RepoAt.Collection().String() != tangled.RepoNSID { 140 return 141 } 142 143 l.Debug("reindexing repo after star deletion") 144 ix.getAndReindexRepo(ctx, star.RepoAt) 145}