+3
-2
appview/indexer/notifier.go
+3
-2
appview/indexer/notifier.go
···
3
import (
4
"context"
5
6
"tangled.org/core/appview/models"
7
"tangled.org/core/appview/notify"
8
"tangled.org/core/log"
···
19
}
20
}
21
22
-
func (ix *Indexer) NewIssueState(ctx context.Context, issue *models.Issue) {
23
l := log.FromContext(ctx).With("notifier", "indexer", "issue", issue)
24
l.Debug("updating an issue")
25
err := ix.Issues.Index(ctx, *issue)
···
46
}
47
}
48
49
-
func (ix *Indexer) NewPullState(ctx context.Context, pull *models.Pull) {
50
l := log.FromContext(ctx).With("notifier", "indexer", "pull", pull)
51
l.Debug("updating a pr")
52
err := ix.Pulls.Index(ctx, pull)
···
3
import (
4
"context"
5
6
+
"github.com/bluesky-social/indigo/atproto/syntax"
7
"tangled.org/core/appview/models"
8
"tangled.org/core/appview/notify"
9
"tangled.org/core/log"
···
20
}
21
}
22
23
+
func (ix *Indexer) NewIssueState(ctx context.Context, actor syntax.DID, issue *models.Issue) {
24
l := log.FromContext(ctx).With("notifier", "indexer", "issue", issue)
25
l.Debug("updating an issue")
26
err := ix.Issues.Index(ctx, *issue)
···
47
}
48
}
49
50
+
func (ix *Indexer) NewPullState(ctx context.Context, actor syntax.DID, pull *models.Pull) {
51
l := log.FromContext(ctx).With("notifier", "indexer", "pull", pull)
52
l.Debug("updating a pr")
53
err := ix.Pulls.Index(ctx, pull)
+2
-2
appview/issues/issues.go
+2
-2
appview/issues/issues.go
···
309
issue.Open = false
310
311
// notify about the issue closure
312
-
rp.notifier.NewIssueState(r.Context(), issue)
313
314
rp.pages.HxLocation(w, fmt.Sprintf("/%s/issues/%d", f.OwnerSlashRepo(), issue.IssueId))
315
return
···
359
issue.Open = true
360
361
// notify about the issue reopen
362
-
rp.notifier.NewIssueState(r.Context(), issue)
363
364
rp.pages.HxLocation(w, fmt.Sprintf("/%s/issues/%d", f.OwnerSlashRepo(), issue.IssueId))
365
return
···
309
issue.Open = false
310
311
// notify about the issue closure
312
+
rp.notifier.NewIssueState(r.Context(), syntax.DID(user.Did), issue)
313
314
rp.pages.HxLocation(w, fmt.Sprintf("/%s/issues/%d", f.OwnerSlashRepo(), issue.IssueId))
315
return
···
359
issue.Open = true
360
361
// notify about the issue reopen
362
+
rp.notifier.NewIssueState(r.Context(), syntax.DID(user.Did), issue)
363
364
rp.pages.HxLocation(w, fmt.Sprintf("/%s/issues/%d", f.OwnerSlashRepo(), issue.IssueId))
365
return
+4
-6
appview/notify/db/db.go
+4
-6
appview/notify/db/db.go
···
283
// no-op
284
}
285
286
-
func (n *databaseNotifier) NewIssueState(ctx context.Context, issue *models.Issue) {
287
// build up the recipients list:
288
// - repo owner
289
// - repo collaborators
···
302
recipients = append(recipients, syntax.DID(p))
303
}
304
305
-
actorDid := syntax.DID(issue.Repo.Did)
306
entityType := "pull"
307
entityId := issue.AtUri().String()
308
repoId := &issue.Repo.Id
···
317
}
318
319
n.notifyEvent(
320
-
actorDid,
321
recipients,
322
eventType,
323
entityType,
···
328
)
329
}
330
331
-
func (n *databaseNotifier) NewPullState(ctx context.Context, pull *models.Pull) {
332
// Get repo details
333
repo, err := db.GetRepo(n.db, db.FilterEq("at_uri", string(pull.RepoAt)))
334
if err != nil {
···
353
recipients = append(recipients, syntax.DID(p))
354
}
355
356
-
actorDid := syntax.DID(repo.Did)
357
entityType := "pull"
358
entityId := pull.PullAt().String()
359
repoId := &repo.Id
···
374
pullId := &p
375
376
n.notifyEvent(
377
-
actorDid,
378
recipients,
379
eventType,
380
entityType,
···
283
// no-op
284
}
285
286
+
func (n *databaseNotifier) NewIssueState(ctx context.Context, actor syntax.DID, issue *models.Issue) {
287
// build up the recipients list:
288
// - repo owner
289
// - repo collaborators
···
302
recipients = append(recipients, syntax.DID(p))
303
}
304
305
entityType := "pull"
306
entityId := issue.AtUri().String()
307
repoId := &issue.Repo.Id
···
316
}
317
318
n.notifyEvent(
319
+
actor,
320
recipients,
321
eventType,
322
entityType,
···
327
)
328
}
329
330
+
func (n *databaseNotifier) NewPullState(ctx context.Context, actor syntax.DID, pull *models.Pull) {
331
// Get repo details
332
repo, err := db.GetRepo(n.db, db.FilterEq("at_uri", string(pull.RepoAt)))
333
if err != nil {
···
352
recipients = append(recipients, syntax.DID(p))
353
}
354
355
entityType := "pull"
356
entityId := pull.PullAt().String()
357
repoId := &repo.Id
···
372
pullId := &p
373
374
n.notifyEvent(
375
+
actor,
376
recipients,
377
eventType,
378
entityType,
+5
-4
appview/notify/merged_notifier.go
+5
-4
appview/notify/merged_notifier.go
···
6
"reflect"
7
"sync"
8
9
"tangled.org/core/appview/models"
10
"tangled.org/core/log"
11
)
···
61
m.fanout("NewIssueComment", ctx, comment)
62
}
63
64
-
func (m *mergedNotifier) NewIssueState(ctx context.Context, issue *models.Issue) {
65
-
m.fanout("NewIssueState", ctx, issue)
66
}
67
68
func (m *mergedNotifier) DeleteIssue(ctx context.Context, issue *models.Issue) {
···
85
m.fanout("NewPullComment", ctx, comment)
86
}
87
88
-
func (m *mergedNotifier) NewPullState(ctx context.Context, pull *models.Pull) {
89
-
m.fanout("NewPullState", ctx, pull)
90
}
91
92
func (m *mergedNotifier) UpdateProfile(ctx context.Context, profile *models.Profile) {
···
6
"reflect"
7
"sync"
8
9
+
"github.com/bluesky-social/indigo/atproto/syntax"
10
"tangled.org/core/appview/models"
11
"tangled.org/core/log"
12
)
···
62
m.fanout("NewIssueComment", ctx, comment)
63
}
64
65
+
func (m *mergedNotifier) NewIssueState(ctx context.Context, actor syntax.DID, issue *models.Issue) {
66
+
m.fanout("NewIssueState", ctx, actor, issue)
67
}
68
69
func (m *mergedNotifier) DeleteIssue(ctx context.Context, issue *models.Issue) {
···
86
m.fanout("NewPullComment", ctx, comment)
87
}
88
89
+
func (m *mergedNotifier) NewPullState(ctx context.Context, actor syntax.DID, pull *models.Pull) {
90
+
m.fanout("NewPullState", ctx, actor, pull)
91
}
92
93
func (m *mergedNotifier) UpdateProfile(ctx context.Context, profile *models.Profile) {
+10
-9
appview/notify/notifier.go
+10
-9
appview/notify/notifier.go
···
3
import (
4
"context"
5
6
"tangled.org/core/appview/models"
7
)
8
···
14
15
NewIssue(ctx context.Context, issue *models.Issue)
16
NewIssueComment(ctx context.Context, comment *models.IssueComment)
17
-
NewIssueState(ctx context.Context, issue *models.Issue)
18
DeleteIssue(ctx context.Context, issue *models.Issue)
19
20
NewFollow(ctx context.Context, follow *models.Follow)
···
22
23
NewPull(ctx context.Context, pull *models.Pull)
24
NewPullComment(ctx context.Context, comment *models.PullComment)
25
-
NewPullState(ctx context.Context, pull *models.Pull)
26
27
UpdateProfile(ctx context.Context, profile *models.Profile)
28
···
41
func (m *BaseNotifier) NewStar(ctx context.Context, star *models.Star) {}
42
func (m *BaseNotifier) DeleteStar(ctx context.Context, star *models.Star) {}
43
44
-
func (m *BaseNotifier) NewIssue(ctx context.Context, issue *models.Issue) {}
45
-
func (m *BaseNotifier) NewIssueComment(ctx context.Context, comment *models.IssueComment) {}
46
-
func (m *BaseNotifier) NewIssueState(ctx context.Context, issue *models.Issue) {}
47
-
func (m *BaseNotifier) DeleteIssue(ctx context.Context, issue *models.Issue) {}
48
49
func (m *BaseNotifier) NewFollow(ctx context.Context, follow *models.Follow) {}
50
func (m *BaseNotifier) DeleteFollow(ctx context.Context, follow *models.Follow) {}
51
52
-
func (m *BaseNotifier) NewPull(ctx context.Context, pull *models.Pull) {}
53
-
func (m *BaseNotifier) NewPullComment(ctx context.Context, models *models.PullComment) {}
54
-
func (m *BaseNotifier) NewPullState(ctx context.Context, pull *models.Pull) {}
55
56
func (m *BaseNotifier) UpdateProfile(ctx context.Context, profile *models.Profile) {}
57
···
3
import (
4
"context"
5
6
+
"github.com/bluesky-social/indigo/atproto/syntax"
7
"tangled.org/core/appview/models"
8
)
9
···
15
16
NewIssue(ctx context.Context, issue *models.Issue)
17
NewIssueComment(ctx context.Context, comment *models.IssueComment)
18
+
NewIssueState(ctx context.Context, actor syntax.DID, issue *models.Issue)
19
DeleteIssue(ctx context.Context, issue *models.Issue)
20
21
NewFollow(ctx context.Context, follow *models.Follow)
···
23
24
NewPull(ctx context.Context, pull *models.Pull)
25
NewPullComment(ctx context.Context, comment *models.PullComment)
26
+
NewPullState(ctx context.Context, actor syntax.DID, pull *models.Pull)
27
28
UpdateProfile(ctx context.Context, profile *models.Profile)
29
···
42
func (m *BaseNotifier) NewStar(ctx context.Context, star *models.Star) {}
43
func (m *BaseNotifier) DeleteStar(ctx context.Context, star *models.Star) {}
44
45
+
func (m *BaseNotifier) NewIssue(ctx context.Context, issue *models.Issue) {}
46
+
func (m *BaseNotifier) NewIssueComment(ctx context.Context, comment *models.IssueComment) {}
47
+
func (m *BaseNotifier) NewIssueState(ctx context.Context, actor syntax.DID, issue *models.Issue) {}
48
+
func (m *BaseNotifier) DeleteIssue(ctx context.Context, issue *models.Issue) {}
49
50
func (m *BaseNotifier) NewFollow(ctx context.Context, follow *models.Follow) {}
51
func (m *BaseNotifier) DeleteFollow(ctx context.Context, follow *models.Follow) {}
52
53
+
func (m *BaseNotifier) NewPull(ctx context.Context, pull *models.Pull) {}
54
+
func (m *BaseNotifier) NewPullComment(ctx context.Context, models *models.PullComment) {}
55
+
func (m *BaseNotifier) NewPullState(ctx context.Context, actor syntax.DID, pull *models.Pull) {}
56
57
func (m *BaseNotifier) UpdateProfile(ctx context.Context, profile *models.Profile) {}
58
+5
-2
appview/notify/posthog/notifier.go
+5
-2
appview/notify/posthog/notifier.go
···
4
"context"
5
"log"
6
7
"github.com/posthog/posthog-go"
8
"tangled.org/core/appview/models"
9
"tangled.org/core/appview/notify"
···
190
}
191
}
192
193
-
func (n *posthogNotifier) NewIssueState(ctx context.Context, issue *models.Issue) {
194
var event string
195
if issue.Open {
196
event = "issue_reopen"
···
202
Event: event,
203
Properties: posthog.Properties{
204
"repo_at": issue.RepoAt.String(),
205
"issue_id": issue.IssueId,
206
},
207
})
···
210
}
211
}
212
213
-
func (n *posthogNotifier) NewPullState(ctx context.Context, pull *models.Pull) {
214
var event string
215
switch pull.State {
216
case models.PullClosed:
···
229
Properties: posthog.Properties{
230
"repo_at": pull.RepoAt,
231
"pull_id": pull.PullId,
232
},
233
})
234
if err != nil {
···
4
"context"
5
"log"
6
7
+
"github.com/bluesky-social/indigo/atproto/syntax"
8
"github.com/posthog/posthog-go"
9
"tangled.org/core/appview/models"
10
"tangled.org/core/appview/notify"
···
191
}
192
}
193
194
+
func (n *posthogNotifier) NewIssueState(ctx context.Context, actor syntax.DID, issue *models.Issue) {
195
var event string
196
if issue.Open {
197
event = "issue_reopen"
···
203
Event: event,
204
Properties: posthog.Properties{
205
"repo_at": issue.RepoAt.String(),
206
+
"actor": actor,
207
"issue_id": issue.IssueId,
208
},
209
})
···
212
}
213
}
214
215
+
func (n *posthogNotifier) NewPullState(ctx context.Context, actor syntax.DID, pull *models.Pull) {
216
var event string
217
switch pull.State {
218
case models.PullClosed:
···
231
Properties: posthog.Properties{
232
"repo_at": pull.RepoAt,
233
"pull_id": pull.PullId,
234
+
"actor": actor,
235
},
236
})
237
if err != nil {
+5
-3
appview/pulls/pulls.go
+5
-3
appview/pulls/pulls.go
···
33
"tangled.org/core/types"
34
35
comatproto "github.com/bluesky-social/indigo/api/atproto"
36
lexutil "github.com/bluesky-social/indigo/lex/util"
37
indigoxrpc "github.com/bluesky-social/indigo/xrpc"
38
"github.com/go-chi/chi/v5"
···
2106
}
2107
2108
func (s *Pulls) MergePull(w http.ResponseWriter, r *http.Request) {
2109
f, err := s.repoResolver.Resolve(r)
2110
if err != nil {
2111
log.Println("failed to resolve repo:", err)
···
2216
2217
// notify about the pull merge
2218
for _, p := range pullsToMerge {
2219
-
s.notifier.NewPullState(r.Context(), p)
2220
}
2221
2222
s.pages.HxLocation(w, fmt.Sprintf("/@%s/%s/pulls/%d", f.OwnerHandle(), f.Name, pull.PullId))
···
2288
}
2289
2290
for _, p := range pullsToClose {
2291
-
s.notifier.NewPullState(r.Context(), p)
2292
}
2293
2294
s.pages.HxLocation(w, fmt.Sprintf("/%s/pulls/%d", f.OwnerSlashRepo(), pull.PullId))
···
2361
}
2362
2363
for _, p := range pullsToReopen {
2364
-
s.notifier.NewPullState(r.Context(), p)
2365
}
2366
2367
s.pages.HxLocation(w, fmt.Sprintf("/%s/pulls/%d", f.OwnerSlashRepo(), pull.PullId))
···
33
"tangled.org/core/types"
34
35
comatproto "github.com/bluesky-social/indigo/api/atproto"
36
+
"github.com/bluesky-social/indigo/atproto/syntax"
37
lexutil "github.com/bluesky-social/indigo/lex/util"
38
indigoxrpc "github.com/bluesky-social/indigo/xrpc"
39
"github.com/go-chi/chi/v5"
···
2107
}
2108
2109
func (s *Pulls) MergePull(w http.ResponseWriter, r *http.Request) {
2110
+
user := s.oauth.GetUser(r)
2111
f, err := s.repoResolver.Resolve(r)
2112
if err != nil {
2113
log.Println("failed to resolve repo:", err)
···
2218
2219
// notify about the pull merge
2220
for _, p := range pullsToMerge {
2221
+
s.notifier.NewPullState(r.Context(), syntax.DID(user.Did), p)
2222
}
2223
2224
s.pages.HxLocation(w, fmt.Sprintf("/@%s/%s/pulls/%d", f.OwnerHandle(), f.Name, pull.PullId))
···
2290
}
2291
2292
for _, p := range pullsToClose {
2293
+
s.notifier.NewPullState(r.Context(), syntax.DID(user.Did), p)
2294
}
2295
2296
s.pages.HxLocation(w, fmt.Sprintf("/%s/pulls/%d", f.OwnerSlashRepo(), pull.PullId))
···
2363
}
2364
2365
for _, p := range pullsToReopen {
2366
+
s.notifier.NewPullState(r.Context(), syntax.DID(user.Did), p)
2367
}
2368
2369
s.pages.HxLocation(w, fmt.Sprintf("/%s/pulls/%d", f.OwnerSlashRepo(), pull.PullId))