(event: GitHubEvent)
| 52 | } |
| 53 | |
| 54 | function processEvent(event: GitHubEvent) { |
| 55 | // Track the repo |
| 56 | getOrCreateRepo(event.repo.name, event.repo.id); |
| 57 | |
| 58 | // Track the actor |
| 59 | getOrCreateUser(event.actor.login, event.actor.id); |
| 60 | |
| 61 | switch (event.type) { |
| 62 | case 'IssuesEvent': { |
| 63 | const e = event as IssuesEvent; |
| 64 | const key = `${event.repo.name}#${e.payload.issue.number}`; |
| 65 | const issue = e.payload.issue; |
| 66 | |
| 67 | if (e.payload.action === 'opened') { |
| 68 | const user = getOrCreateUser(issue.user.login, issue.user.id); |
| 69 | user.issues_opened++; |
| 70 | } |
| 71 | |
| 72 | if (!issues.has(key)) { |
| 73 | issues.set(key, { |
| 74 | id: issue.id, |
| 75 | number: issue.number, |
| 76 | title: issue.title, |
| 77 | body: issue.body, |
| 78 | state: issue.state, |
| 79 | author: issue.user.login, |
| 80 | labels: issue.labels.map((l) => l.name), |
| 81 | created_at: issue.created_at, |
| 82 | updated_at: issue.updated_at, |
| 83 | closed_at: issue.closed_at, |
| 84 | comments: [], |
| 85 | }); |
| 86 | } else { |
| 87 | // Update state if changed |
| 88 | const existing = issues.get(key)!; |
| 89 | existing.state = issue.state; |
| 90 | existing.updated_at = issue.updated_at; |
| 91 | existing.closed_at = issue.closed_at; |
| 92 | } |
| 93 | break; |
| 94 | } |
| 95 | |
| 96 | case 'IssueCommentEvent': { |
| 97 | const e = event as IssueCommentEvent; |
| 98 | const key = `${event.repo.name}#${e.payload.issue.number}`; |
| 99 | const comment = e.payload.comment; |
| 100 | |
| 101 | const user = getOrCreateUser(comment.user.login, comment.user.id); |
| 102 | user.comments_made++; |
| 103 | |
| 104 | // Ensure issue exists |
| 105 | if (!issues.has(key)) { |
| 106 | const issue = e.payload.issue; |
| 107 | issues.set(key, { |
| 108 | id: issue.id, |
| 109 | number: issue.number, |
| 110 | title: issue.title, |
| 111 | body: issue.body, |
no test coverage detected