private void AddIssueOrPullRequest(GitHubEventRepository repository, GitHubEventIssueOrPullRequest issueOrPullRequest)
            {
                var index = _indexService.Index;

                if (index is null)
                {
                    return;
                }

                var crawledRepo = index.Repos.SingleOrDefault(r => r.Id == repository.Id);

                if (crawledRepo is null)
                {
                    return;
                }

                var crawledIssue = new CrawledIssue();

                crawledIssue.Id            = issueOrPullRequest.Id;
                crawledIssue.Repo          = crawledRepo;
                crawledIssue.Number        = issueOrPullRequest.Number;
                crawledIssue.CreatedAt     = issueOrPullRequest.CreatedAt;
                crawledIssue.CreatedBy     = issueOrPullRequest.User.Login;
                crawledIssue.IsPullRequest = issueOrPullRequest is GitHubEventPullRequest;

                UpdateIssueOrPullRequest(repository, issueOrPullRequest, crawledIssue);

                crawledRepo.Issues[crawledIssue.Number] = crawledIssue;

                AddTrieTerms(crawledIssue, crawledIssue.GetTrieTerms());

                _indexService.NotifyIndexChanged();
            }
            private void UpdateIssueOrPullRequest(GitHubEventRepository repository, GitHubEventIssueOrPullRequest issueOrPullRequest, CrawledIssue crawledIssue)
            {
                crawledIssue.IsOpen    = issueOrPullRequest.State == "open";
                crawledIssue.Title     = issueOrPullRequest.Title;
                crawledIssue.IsLocked  = issueOrPullRequest.Locked;
                crawledIssue.UpdatedAt = issueOrPullRequest.UpdatedAt; // TODO: Non-atomic write
                crawledIssue.ClosedAt  = issueOrPullRequest.ClosedAt;  // TODO: Non-atomic write
                crawledIssue.Assignees = issueOrPullRequest.Assignees.Select(a => a.Login).ToArray();
                crawledIssue.Labels    = issueOrPullRequest.Labels.Select(l => GetOrCreateLabel(repository, l)).ToArray();
                crawledIssue.Milestone = GetOrCreateMilestone(repository, issueOrPullRequest.Milestone);

                if (issueOrPullRequest is GitHubEventPullRequest pullRequest)
                {
                    crawledIssue.IsMerged = pullRequest.Merged;
                    crawledIssue.IsDraft  = pullRequest.Draft;
                }
            }