Add AccountService and ProjectService.

This commit is contained in:
takezoe
2013-06-02 14:29:52 +09:00
parent f83d9a63b9
commit 6512b673f6
5 changed files with 63 additions and 9 deletions

View File

@@ -16,7 +16,7 @@ abstract class ControllerBase extends ScalatraFilter with ClientSideValidationFo
implicit def context: Context = Context(servletContext.getContextPath, LoginUser) implicit def context: Context = Context(servletContext.getContextPath, LoginUser)
// TODO get from session // TODO get from session
private val LoginUser = System.getProperty("user.name") private val LoginUser = "admin" //System.getProperty("user.name")
} }

View File

@@ -1,25 +1,27 @@
package app package app
import util.Directory._ import util.Directory._
import org.scalatra._ import service._
import java.io.File import java.io.File
import org.eclipse.jgit.api.Git import org.eclipse.jgit.api.Git
import org.eclipse.jgit.lib._ import org.eclipse.jgit.lib._
import org.apache.commons.io._ import org.apache.commons.io._
import jp.sf.amateras.scalatra.forms._ import jp.sf.amateras.scalatra.forms._
class CreateRepositoryController extends CreateRepositoryControllerBase with ProjectService with AccountService
/** /**
* Creates new repository. * Creates new repository.
*/ */
class CreateRepositoryController extends ControllerBase { trait CreateRepositoryControllerBase extends ControllerBase { self: ProjectService =>
case class RepositoryCreationForm(name: String, description: String) case class RepositoryCreationForm(name: String, description: String) // TODO Option
val form = mapping( val form = mapping(
"name" -> trim(label("Repository name", text(required, maxlength(40), repository))), "name" -> trim(label("Repository name", text(required, maxlength(40), repository))),
"description" -> trim(label("Description" , text())) "description" -> trim(label("Description" , text()))
)(RepositoryCreationForm.apply) )(RepositoryCreationForm.apply)
/** /**
* Show the new repository form. * Show the new repository form.
*/ */
@@ -60,6 +62,9 @@ class CreateRepositoryController extends ControllerBase {
} finally { } finally {
FileUtils.deleteDirectory(tmpdir) FileUtils.deleteDirectory(tmpdir)
} }
// insert to the database
createProject(form.name, context.loginUser, Some(form.description))
// redirect to the repository // redirect to the repository
redirect("/%s/%s".format(context.loginUser, form.name)) redirect("/%s/%s".format(context.loginUser, form.name))

View File

@@ -11,7 +11,7 @@ object Projects extends Table[Project]("PROJECT") {
def defaultBranch = column[String]("DEFAULT_BRANCH") def defaultBranch = column[String]("DEFAULT_BRANCH")
def registeredDate = column[java.sql.Date]("REGISTERED_DATE") // TODO convert java.util.Date later def registeredDate = column[java.sql.Date]("REGISTERED_DATE") // TODO convert java.util.Date later
def updatedDate = column[java.sql.Date]("UPDATED_DATE") def updatedDate = column[java.sql.Date]("UPDATED_DATE")
def lastActivityDate = column[java.sql.Date]("LAST_LOGIN_DATE") def lastActivityDate = column[java.sql.Date]("LAST_ACTIVITY_DATE")
def * = projectId.? ~ projectName ~ userId ~ projectType ~ description.? ~ defaultBranch ~ registeredDate ~ updatedDate ~ lastActivityDate <> (Project, Project.unapply _) def * = projectId.? ~ projectName ~ userId ~ projectType ~ description.? ~ defaultBranch ~ registeredDate ~ updatedDate ~ lastActivityDate <> (Project, Project.unapply _)
def ins = projectName ~ userId ~ projectType ~ description.? ~ defaultBranch ~ registeredDate ~ updatedDate ~ lastActivityDate <> ({ t => Project(None, t._1, t._2, t._3, t._4, t._5, t._6, t._7, t._8)}, { (o: Project) => Some((o.projectName, o.userId, o.projectType, o.description, o.defaultBranch, o.registeredDate, o.updatedDate, o.lastActivityDate))}) def ins = projectName ~ userId ~ projectType ~ description.? ~ defaultBranch ~ registeredDate ~ updatedDate ~ lastActivityDate <> ({ t => Project(None, t._1, t._2, t._3, t._4, t._5, t._6, t._7, t._8)}, { (o: Project) => Some((o.projectName, o.userId, o.projectType, o.description, o.defaultBranch, o.registeredDate, o.updatedDate, o.lastActivityDate))})
} }

View File

@@ -0,0 +1,12 @@
package service
import model._
import scala.slick.driver.H2Driver.simple._
import Database.threadLocalSession
trait AccountService {
def getAccountByUserName(userName: String): Option[Account] =
Query(Accounts) filter(_.userName is userName.bind) firstOption
}

View File

@@ -0,0 +1,37 @@
package service
import model._
import scala.slick.driver.H2Driver.simple._
import Database.threadLocalSession
trait ProjectService { self: AccountService =>
/**
* Creates a new project.
*
* The project is created as public repository at first. Users can modify the project type at the repository settings
* page after the project creation to configure the project as the private repository.
*
* @param projectName the project name
* @param userName the user name of the project owner
* @param description the project description
* @return the created project id
*/
def createProject(projectName: String, userName: String, description: Option[String]): Long = {
// TODO create a git repository also here?
val currentDate = new java.sql.Date(System.currentTimeMillis)
Projects.ins returning Projects.projectId insert
Project(
projectId = None,
projectName = projectName,
userId = getAccountByUserName(userName).get.userId.get,
projectType = 0 /* 0:public, 1:private */,
description = description,
defaultBranch = "master",
registeredDate = currentDate,
updatedDate = currentDate,
lastActivityDate = currentDate)
}
}