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.StarredByDid, 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.StarredByDid, 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) NewPullComment(ctx context.Context, comment *models.PullComment) { 90 err := n.client.Enqueue(posthog.Capture{ 91 DistinctId: comment.OwnerDid, 92 Event: "new_pull_comment", 93 Properties: posthog.Properties{ 94 "repo_at": comment.RepoAt, 95 "pull_id": comment.PullId, 96 }, 97 }) 98 if err != nil { 99 log.Println("failed to enqueue posthog event:", err) 100 } 101} 102 103func (n *posthogNotifier) NewPullClosed(ctx context.Context, pull *models.Pull) { 104 err := n.client.Enqueue(posthog.Capture{ 105 DistinctId: pull.OwnerDid, 106 Event: "pull_closed", 107 Properties: posthog.Properties{ 108 "repo_at": pull.RepoAt, 109 "pull_id": pull.PullId, 110 }, 111 }) 112 if err != nil { 113 log.Println("failed to enqueue posthog event:", err) 114 } 115} 116 117func (n *posthogNotifier) NewFollow(ctx context.Context, follow *models.Follow) { 118 err := n.client.Enqueue(posthog.Capture{ 119 DistinctId: follow.UserDid, 120 Event: "follow", 121 Properties: posthog.Properties{"subject": follow.SubjectDid}, 122 }) 123 if err != nil { 124 log.Println("failed to enqueue posthog event:", err) 125 } 126} 127 128func (n *posthogNotifier) DeleteFollow(ctx context.Context, follow *models.Follow) { 129 err := n.client.Enqueue(posthog.Capture{ 130 DistinctId: follow.UserDid, 131 Event: "unfollow", 132 Properties: posthog.Properties{"subject": follow.SubjectDid}, 133 }) 134 if err != nil { 135 log.Println("failed to enqueue posthog event:", err) 136 } 137} 138 139func (n *posthogNotifier) UpdateProfile(ctx context.Context, profile *models.Profile) { 140 err := n.client.Enqueue(posthog.Capture{ 141 DistinctId: profile.Did, 142 Event: "edit_profile", 143 }) 144 if err != nil { 145 log.Println("failed to enqueue posthog event:", err) 146 } 147} 148 149func (n *posthogNotifier) DeleteString(ctx context.Context, did, rkey string) { 150 err := n.client.Enqueue(posthog.Capture{ 151 DistinctId: did, 152 Event: "delete_string", 153 Properties: posthog.Properties{"rkey": rkey}, 154 }) 155 if err != nil { 156 log.Println("failed to enqueue posthog event:", err) 157 } 158} 159 160func (n *posthogNotifier) EditString(ctx context.Context, string *models.String) { 161 err := n.client.Enqueue(posthog.Capture{ 162 DistinctId: string.Did.String(), 163 Event: "edit_string", 164 Properties: posthog.Properties{"rkey": string.Rkey}, 165 }) 166 if err != nil { 167 log.Println("failed to enqueue posthog event:", err) 168 } 169} 170 171func (n *posthogNotifier) NewString(ctx context.Context, string *models.String) { 172 err := n.client.Enqueue(posthog.Capture{ 173 DistinctId: string.Did.String(), 174 Event: "new_string", 175 Properties: posthog.Properties{"rkey": string.Rkey}, 176 }) 177 if err != nil { 178 log.Println("failed to enqueue posthog event:", err) 179 } 180} 181 182func (n *posthogNotifier) NewIssueComment(ctx context.Context, comment *models.IssueComment, mentions []syntax.DID) { 183 err := n.client.Enqueue(posthog.Capture{ 184 DistinctId: comment.Did, 185 Event: "new_issue_comment", 186 Properties: posthog.Properties{ 187 "issue_at": comment.IssueAt, 188 "mentions": mentions, 189 }, 190 }) 191 if err != nil { 192 log.Println("failed to enqueue posthog event:", err) 193 } 194} 195 196func (n *posthogNotifier) NewIssueState(ctx context.Context, actor syntax.DID, issue *models.Issue) { 197 var event string 198 if issue.Open { 199 event = "issue_reopen" 200 } else { 201 event = "issue_closed" 202 } 203 err := n.client.Enqueue(posthog.Capture{ 204 DistinctId: issue.Did, 205 Event: event, 206 Properties: posthog.Properties{ 207 "repo_at": issue.RepoAt.String(), 208 "actor": actor, 209 "issue_id": issue.IssueId, 210 }, 211 }) 212 if err != nil { 213 log.Println("failed to enqueue posthog event:", err) 214 } 215} 216 217func (n *posthogNotifier) NewPullState(ctx context.Context, actor syntax.DID, pull *models.Pull) { 218 var event string 219 switch pull.State { 220 case models.PullClosed: 221 event = "pull_closed" 222 case models.PullOpen: 223 event = "pull_reopen" 224 case models.PullMerged: 225 event = "pull_merged" 226 default: 227 log.Println("posthog: unexpected new PR state:", pull.State) 228 return 229 } 230 err := n.client.Enqueue(posthog.Capture{ 231 DistinctId: pull.OwnerDid, 232 Event: event, 233 Properties: posthog.Properties{ 234 "repo_at": pull.RepoAt, 235 "pull_id": pull.PullId, 236 "actor": actor, 237 }, 238 }) 239 if err != nil { 240 log.Println("failed to enqueue posthog event:", err) 241 } 242}