diff --git a/src/main/scala/app/CreateRepositoryController.scala b/src/main/scala/app/CreateRepositoryController.scala index 1a650a5..af0373b 100644 --- a/src/main/scala/app/CreateRepositoryController.scala +++ b/src/main/scala/app/CreateRepositoryController.scala @@ -84,7 +84,7 @@ def validate(name: String, value: String): Option[String] = { if(!value.matches("^[a-zA-Z0-9\\-_]+$")){ Some("Repository name contains invalid character.") - } else if(getRepositories(context.loginAccount.get.userName, servletContext).contains(value)){ + } else if(getRepositoriesOfUser(context.loginAccount.get.userName, servletContext).contains(value)){ Some("Repository already exists.") } else { None diff --git a/src/main/scala/app/IndexController.scala b/src/main/scala/app/IndexController.scala index 1fffffa..46fe857 100644 --- a/src/main/scala/app/IndexController.scala +++ b/src/main/scala/app/IndexController.scala @@ -1,9 +1,13 @@ package app -class IndexController extends ControllerBase { +import service._ + +class IndexController extends IndexControllerBase with ProjectService with AccountService + +trait IndexControllerBase extends ControllerBase { self: ProjectService => get("/"){ - html.index() + html.index(getAccessibleRepositories(context.loginAccount, servletContext)) } } \ No newline at end of file diff --git a/src/main/scala/app/RepositoryViewerController.scala b/src/main/scala/app/RepositoryViewerController.scala index 4c2f6cb..196f639 100644 --- a/src/main/scala/app/RepositoryViewerController.scala +++ b/src/main/scala/app/RepositoryViewerController.scala @@ -25,7 +25,7 @@ get("/:owner") { val owner = params("owner") - html.user(getAccountByUserName(owner).get, getRepositories(owner, servletContext)) + html.user(getAccountByUserName(owner).get, getRepositoriesOfUser(owner, servletContext)) } /** diff --git a/src/main/scala/service/AccountService.scala b/src/main/scala/service/AccountService.scala index 3454c35..b8a7bb2 100644 --- a/src/main/scala/service/AccountService.scala +++ b/src/main/scala/service/AccountService.scala @@ -6,6 +6,10 @@ trait AccountService { + def getAccountByUserId(userId: Long): Option[Account] = + Query(Accounts) filter(_.userId is userId.bind) firstOption + + def getAccountByUserName(userName: String): Option[Account] = Query(Accounts) filter(_.userName is userName.bind) firstOption diff --git a/src/main/scala/service/ProjectService.scala b/src/main/scala/service/ProjectService.scala index 491aa12..218e614 100644 --- a/src/main/scala/service/ProjectService.scala +++ b/src/main/scala/service/ProjectService.scala @@ -44,10 +44,10 @@ * @param userName the user name * @return the project list which is sorted in descending order of lastActivityDate. */ - def getRepositories(userName: String, servletContext: ServletContext): List[RepositoryInfo] = { + def getRepositoriesOfUser(userName: String, servletContext: ServletContext): List[RepositoryInfo] = { (Query(Projects) filter(_.userId is getUserId(userName).bind) sortBy(_.lastActivityDate desc) list) map { project => val repositoryInfo = JGitUtil.getRepositoryInfo(userName, project.projectName, servletContext) - RepositoryInfo(userName, project.projectName, repositoryInfo.url, project, repositoryInfo.branchList, repositoryInfo.tags) + RepositoryInfo(repositoryInfo.owner, repositoryInfo.name, repositoryInfo.url, project, repositoryInfo.branchList, repositoryInfo.tags) } } @@ -56,10 +56,31 @@ (project.userId is getUserId(userName).bind) && (project.projectName is projectName.bind) } firstOption) map { project => val repositoryInfo = JGitUtil.getRepositoryInfo(userName, project.projectName, servletContext) - RepositoryInfo(userName, project.projectName, repositoryInfo.url, project, repositoryInfo.branchList, repositoryInfo.tags) + RepositoryInfo(repositoryInfo.owner, repositoryInfo.name, repositoryInfo.url, project, repositoryInfo.branchList, repositoryInfo.tags) } } + def getAccessibleRepositories(account: Option[Account], servletContext: ServletContext): List[RepositoryInfo] = { + account match { + case Some(x) => { + (Query(Projects) sortBy(_.lastActivityDate desc) list) map { project => + // TODO ユーザ名はジョインして取得する? + val repositoryInfo = JGitUtil.getRepositoryInfo(getUserName(project.userId), project.projectName, servletContext) + RepositoryInfo(repositoryInfo.owner, repositoryInfo.name, repositoryInfo.url, project, repositoryInfo.branchList, repositoryInfo.tags) + } + } + case None => { + (Query(Projects) filter(_.projectType is 0.bind) sortBy(_.lastActivityDate desc) list) map { project => + // TODO ユーザ名はジョインして取得する? + val repositoryInfo = JGitUtil.getRepositoryInfo(getUserName(project.userId), project.projectName, servletContext) + RepositoryInfo(repositoryInfo.owner, repositoryInfo.name, repositoryInfo.url, project, repositoryInfo.branchList, repositoryInfo.tags) + } + } + } + } + + private def getUserName(userId: Long): String = getAccountByUserId(userId).get.userName + private def getUserId(userName: String): Long = getAccountByUserName(userName).get.userId.get } diff --git a/src/main/twirl/index.scala.html b/src/main/twirl/index.scala.html index 4de76a1..ac68c63 100644 --- a/src/main/twirl/index.scala.html +++ b/src/main/twirl/index.scala.html @@ -1,9 +1,12 @@ -@()(implicit context: app.Context) +@(repositories: List[service.ProjectService.RepositoryInfo])(implicit context: app.Context) @import context._ @main("GitBucket"){ -