override suspend fun load()

in src/main/kotlin/github/GitHubIssuesLoader.kt [39:85]


    override suspend fun load(params: IssuesLoader.Params) : IssuesLoadResult {
        if (params !is IssuesLoader.Params.GitHub)
            return IssuesLoadResult.Failed.wrongParams(GitHubIssuesLoader::class)

        val issues = try {
            gitHub
                .getRepository("${params.owner}/${params.repository}")
                .queryIssues()
                .state(GHIssueState.ALL)
                .pageSize(defaultBatchSize)
                .sort(GHIssueQueryBuilder.Sort.CREATED)
                .direction(GHDirection.ASC)
                .list()
                .filter { it.pullRequest == null }
        } catch (e: Exception) {
            logger.externalServiceClientError(e, "failed to retrieve issues from GitHub")
            return IssuesLoadResult.Failed.messageOrUnknownException(e)
        }

        val issuesCount = issues.count()
        val result = issues.mapIndexedNotNull { issueIndex, it ->
            try {
                val title = it.title; val state = it.state; val number = it.number
                requireNotNull(title); requireNotNull(state)

                ExternalIssue(
                    summary = title,
                    description = it.body,
                    status = state.name,
                    assignee = it.assignee?.login,
                    externalId = number.toString(),
                    externalName = title,
                    externalUrl = it.htmlUrl.toString()
                )
                    .also { logger.info(it, issueIndex, issuesCount) }
                    .let { IssueTemplate(it) }
            } catch (e: Exception) {
                logger.failedToParseIssue(issueIndex, issuesCount, "GitHub")
                null
            }
        }

        if (result.count() != issuesCount) logger.someIssuesFailedToParse()

        return if (result.isNotEmpty() || issuesCount == 0) IssuesLoadResult.Success(result)
        else IssuesLoadResult.Failed("couldn't parse any issues")
    }