diff --git a/src/main/scala/app/DashboardController.scala b/src/main/scala/app/DashboardController.scala index 81f0b6e..7186d40 100644 --- a/src/main/scala/app/DashboardController.scala +++ b/src/main/scala/app/DashboardController.scala @@ -48,7 +48,7 @@ countIssue(condition, Map.empty, repositories: _*), countIssue(condition, Map("assigned" -> userName), repositories: _*), countIssue(condition, Map("created_by" -> userName), repositories: _*), - repositories, + countIssueGroupByRepository(condition, filterUser, repositories: _*), condition, filter) diff --git a/src/main/scala/service/IssuesService.scala b/src/main/scala/service/IssuesService.scala index 74dc9cd..0167f54 100644 --- a/src/main/scala/service/IssuesService.scala +++ b/src/main/scala/service/IssuesService.scala @@ -80,6 +80,27 @@ } .toMap } + /** + * Returns list which contains issue count for each repository. + * If the issue does not exist, its repository is not included in the result. + * + * @param condition the search condition + * @param filterUser the filter user name (key is "all", "assigned" or "created_by", value is the user name) + * @param repos Tuple of the repository owner and the repository name + * @return list which contains issue count for each repository + */ + def countIssueGroupByRepository(condition: IssueSearchCondition, filterUser: Map[String, String], + repos: (String, String)*): List[(String, String, Int)] = { + searchIssueQuery(repos, condition.copy(repo = None), filterUser) + .groupBy { t => + t.userName ~ t.repositoryName + } + .map { case (repo, t) => + repo ~ t.length + } + .filter (_._3 > 0.bind) + .list + } /** * Returns the search result against issues. @@ -133,7 +154,10 @@ */ private def searchIssueQuery(repos: Seq[(String, String)], condition: IssueSearchCondition, filterUser: Map[String, String]) = Query(Issues) filter { t1 => - (repos.map { case (owner, repository) => t1.byRepository(owner, repository) } reduceLeft ( _ || _ ) ) && + (condition.repo + .map { _.split('/') match { case array => Seq(array(0) -> array(1)) } } + .getOrElse (repos) + .map { case (owner, repository) => t1.byRepository(owner, repository) } reduceLeft ( _ || _ ) ) && (t1.closed is (condition.state == "closed").bind) && (t1.milestoneId is condition.milestoneId.get.get.bind, condition.milestoneId.flatten.isDefined) && (t1.milestoneId isNull, condition.milestoneId == Some(None)) && diff --git a/src/main/twirl/dashboard/issues.scala.html b/src/main/twirl/dashboard/issues.scala.html index 5434bc3..d59e2ec 100644 --- a/src/main/twirl/dashboard/issues.scala.html +++ b/src/main/twirl/dashboard/issues.scala.html @@ -2,7 +2,7 @@ allCount: Int, assignedCount: Int, createdByCount: Int, - repositories: List[(String, String)], + repositories: List[(String, String, Int)], condition: service.IssuesService.IssueSearchCondition, filter: String)(implicit context: app.Context) @import context._ @@ -33,10 +33,10 @@