diff --git a/src/main/scala/gitbucket/core/controller/ApiController.scala b/src/main/scala/gitbucket/core/controller/ApiController.scala index b48602f..8a465d4 100644 --- a/src/main/scala/gitbucket/core/controller/ApiController.scala +++ b/src/main/scala/gitbucket/core/controller/ApiController.scala @@ -288,6 +288,32 @@ } /** + * https://developer.github.com/v3/issues/#list-issues-for-a-repository + */ + get("/api/v3/repos/:owner/:repository/issues")(referrersOnly { repository => + val page = IssueSearchCondition.page(request) + // TODO: more api spec condition + val condition = IssueSearchCondition(request) + val baseOwner = getAccountByUserName(repository.owner).get + + val issues: List[(Issue, Account)] = + searchIssueByApi( + condition = condition, + offset = (page - 1) * PullRequestLimit, + limit = PullRequestLimit, + repos = repository.owner -> repository.name + ) + + JsonFormat(issues.map { case (issue, issueUser) => + ApiIssue( + issue = issue, + repositoryName = RepositoryName(repository), + user = ApiUser(issueUser) + ) + }) + }) + + /** * https://developer.github.com/v3/issues/#get-a-single-issue */ get("/api/v3/repos/:owner/:repository/issues/:id")(referrersOnly { repository => diff --git a/src/main/scala/gitbucket/core/service/IssuesService.scala b/src/main/scala/gitbucket/core/service/IssuesService.scala index 591fb11..6a9769d 100644 --- a/src/main/scala/gitbucket/core/service/IssuesService.scala +++ b/src/main/scala/gitbucket/core/service/IssuesService.scala @@ -191,6 +191,19 @@ } /** for api + * @return (issue, issueUser, commentCount) + */ + def searchIssueByApi(condition: IssueSearchCondition, offset: Int, limit: Int, repos: (String, String)*) + (implicit s: Session): List[(Issue, Account)] = { + // get issues and comment count and labels + searchIssueQueryBase(condition, false, offset, limit, repos) + .innerJoin(Accounts).on { case (((t1, t2), i), t3) => t3.userName === t1.openedUserName } + .sortBy { case (((t1, t2), i), t3) => i asc } + .map { case (((t1, t2), i), t3) => (t1, t3) } + .list + } + + /** for api * @return (issue, issueUser, commentCount, pullRequest, headRepo, headOwner) */ def searchPullRequestByApi(condition: IssueSearchCondition, offset: Int, limit: Int, repos: (String, String)*)