private static bool IsRelevant(WebHookPayload payload, HashSet <GitHubIssueId> knownIds)
        {
            if (payload.action == null || !_relevantActions.Contains(payload.action))
            {
                return(false);
            }

            if (payload.issue != null && payload.repository != null)
            {
                var idText = payload.repository.full_name + "#" + payload.issue.number;
                if (GitHubIssueId.TryParse(idText, out var issueId) && knownIds.Contains(issueId))
                {
                    return(true);
                }
            }

            if (payload.project_card != null)
            {
                if (GitHubIssueId.TryParse(payload.project_card.content_url, out var issueId) && knownIds.Contains(issueId))
                {
                    return(true);
                }
            }

            return(IsRelevant(payload.label) ||
                   IsRelevant(payload.issue));
        }
        private IEnumerable <GitHubIssueId> GetKnownIds()
        {
            var tree = _treeService.Tree;

            if (tree != null)
            {
                foreach (var node in tree.Roots.SelectMany(r => r.DescendantsAndSelf()))
                {
                    if (GitHubIssueId.TryParse(node.Id, out var id))
                    {
                        yield return(id);
                    }
                }
            }
        }