this repo has no description
1package posthog 2 3import ( 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" 11) 12 13type posthogNotifier struct { 14 client posthog.Client 15 notify.BaseNotifier 16} 17 18func NewPosthogNotifier(client posthog.Client) notify.Notifier { 19 return &posthogNotifier{ 20 client, 21 notify.BaseNotifier{}, 22 } 23} 24 25var _ notify.Notifier = &posthogNotifier{} 26 27func (n *posthogNotifier) NewRepo(ctx context.Context, repo *models.Repo) { 28 err := n.client.Enqueue(posthog.Capture{ 29 DistinctId: repo.Did, 30 Event: "new_repo", 31 Properties: posthog.Properties{"repo": repo.Name, "repo_at": repo.RepoAt()}, 32 }) 33 if err != nil { 34 log.Println("failed to enqueue posthog event:", err) 35 } 36} 37 38func (n *posthogNotifier) NewStar(ctx context.Context, star *models.Star) { 39 err := n.client.Enqueue(posthog.Capture{ 40 DistinctId: star.Did, 41 Event: "star", 42 Properties: posthog.Properties{"repo_at": star.RepoAt.String()}, 43 }) 44 if err != nil { 45 log.Println("failed to enqueue posthog event:", err) 46 } 47} 48 49func (n *posthogNotifier) DeleteStar(ctx context.Context, star *models.Star) { 50 err := n.client.Enqueue(posthog.Capture{ 51 DistinctId: star.Did, 52 Event: "unstar", 53 Properties: posthog.Properties{"repo_at": star.RepoAt.String()}, 54 }) 55 if err != nil { 56 log.Println("failed to enqueue posthog event:", err) 57 } 58} 59 60func (n *posthogNotifier) NewIssue(ctx context.Context, issue *models.Issue, mentions []syntax.DID) { 61 err := n.client.Enqueue(posthog.Capture{ 62 DistinctId: issue.Did, 63 Event: "new_issue", 64 Properties: posthog.Properties{ 65 "repo_at": issue.RepoAt.String(), 66 "issue_id": issue.IssueId, 67 "mentions": mentions, 68 }, 69 }) 70 if err != nil { 71 log.Println("failed to enqueue posthog event:", err) 72 } 73} 74 75func (n *posthogNotifier) NewPull(ctx context.Context, pull *models.Pull) { 76 err := n.client.Enqueue(posthog.Capture{ 77 DistinctId: pull.OwnerDid, 78 Event: "new_pull", 79 Properties: posthog.Properties{ 80 "repo_at": pull.RepoAt, 81 "pull_id": pull.PullId, 82 }, 83 }) 84 if err != nil { 85 log.Println("failed to enqueue posthog event:", err) 86 } 87} 88 89func (n *posthogNotifier) NewPullClosed(ctx context.Context, pull *models.Pull) { 90 err := n.client.Enqueue(posthog.Capture{ 91 DistinctId: pull.OwnerDid, 92 Event: "pull_closed", 93 Properties: posthog.Properties{ 94 "repo_at": pull.RepoAt, 95 "pull_id": pull.PullId, 96 }, 97 }) 98 if err != nil { 99 log.Println("failed to enqueue posthog event:", err) 100 } 101} 102 103func (n *posthogNotifier) NewFollow(ctx context.Context, follow *models.Follow) { 104 err := n.client.Enqueue(posthog.Capture{ 105 DistinctId: follow.UserDid, 106 Event: "follow", 107 Properties: posthog.Properties{"subject": follow.SubjectDid}, 108 }) 109 if err != nil { 110 log.Println("failed to enqueue posthog event:", err) 111 } 112} 113 114func (n *posthogNotifier) DeleteFollow(ctx context.Context, follow *models.Follow) { 115 err := n.client.Enqueue(posthog.Capture{ 116 DistinctId: follow.UserDid, 117 Event: "unfollow", 118 Properties: posthog.Properties{"subject": follow.SubjectDid}, 119 }) 120 if err != nil { 121 log.Println("failed to enqueue posthog event:", err) 122 } 123} 124 125func (n *posthogNotifier) UpdateProfile(ctx context.Context, profile *models.Profile) { 126 err := n.client.Enqueue(posthog.Capture{ 127 DistinctId: profile.Did, 128 Event: "edit_profile", 129 }) 130 if err != nil { 131 log.Println("failed to enqueue posthog event:", err) 132 } 133} 134 135func (n *posthogNotifier) DeleteString(ctx context.Context, did, rkey string) { 136 err := n.client.Enqueue(posthog.Capture{ 137 DistinctId: did, 138 Event: "delete_string", 139 Properties: posthog.Properties{"rkey": rkey}, 140 }) 141 if err != nil { 142 log.Println("failed to enqueue posthog event:", err) 143 } 144} 145 146func (n *posthogNotifier) EditString(ctx context.Context, string *models.String) { 147 err := n.client.Enqueue(posthog.Capture{ 148 DistinctId: string.Did.String(), 149 Event: "edit_string", 150 Properties: posthog.Properties{"rkey": string.Rkey}, 151 }) 152 if err != nil { 153 log.Println("failed to enqueue posthog event:", err) 154 } 155} 156 157func (n *posthogNotifier) NewString(ctx context.Context, string *models.String) { 158 err := n.client.Enqueue(posthog.Capture{ 159 DistinctId: string.Did.String(), 160 Event: "new_string", 161 Properties: posthog.Properties{"rkey": string.Rkey}, 162 }) 163 if err != nil { 164 log.Println("failed to enqueue posthog event:", err) 165 } 166} 167 168func (n *posthogNotifier) NewComment(ctx context.Context, comment *models.Comment) { 169 err := n.client.Enqueue(posthog.Capture{ 170 DistinctId: comment.Did.String(), 171 Event: "new_comment", 172 Properties: posthog.Properties{ 173 "subject_at": comment.Subject, 174 "mentions": comment.Mentions, 175 }, 176 }) 177 if err != nil { 178 log.Println("failed to enqueue posthog event:", err) 179 } 180} 181 182func (n *posthogNotifier) NewIssueState(ctx context.Context, actor syntax.DID, issue *models.Issue) { 183 var event string 184 if issue.Open { 185 event = "issue_reopen" 186 } else { 187 event = "issue_closed" 188 } 189 err := n.client.Enqueue(posthog.Capture{ 190 DistinctId: issue.Did, 191 Event: event, 192 Properties: posthog.Properties{ 193 "repo_at": issue.RepoAt.String(), 194 "actor": actor, 195 "issue_id": issue.IssueId, 196 }, 197 }) 198 if err != nil { 199 log.Println("failed to enqueue posthog event:", err) 200 } 201} 202 203func (n *posthogNotifier) NewPullState(ctx context.Context, actor syntax.DID, pull *models.Pull) { 204 var event string 205 switch pull.State { 206 case models.PullClosed: 207 event = "pull_closed" 208 case models.PullOpen: 209 event = "pull_reopen" 210 case models.PullMerged: 211 event = "pull_merged" 212 default: 213 log.Println("posthog: unexpected new PR state:", pull.State) 214 return 215 } 216 err := n.client.Enqueue(posthog.Capture{ 217 DistinctId: pull.OwnerDid, 218 Event: event, 219 Properties: posthog.Properties{ 220 "repo_at": pull.RepoAt, 221 "pull_id": pull.PullId, 222 "actor": actor, 223 }, 224 }) 225 if err != nil { 226 log.Println("failed to enqueue posthog event:", err) 227 } 228}