This repository has no description
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}