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")
}