Separate milestones from IssuesController / IssuesService.

This commit is contained in:
takezoe
2013-06-24 13:43:35 +09:00
parent 1de2ddf242
commit 2703b22718
5 changed files with 193 additions and 155 deletions

View File

@@ -0,0 +1,122 @@
package app
import jp.sf.amateras.scalatra.forms._
import service._
import util.{WritableRepositoryAuthenticator, ReadableRepositoryAuthenticator, UsersOnlyAuthenticator}
class MilestonesController extends MilestonesControllerBase
with MilestonesService with RepositoryService with AccountService
with ReadableRepositoryAuthenticator with WritableRepositoryAuthenticator
trait MilestonesControllerBase extends ControllerBase {
self: MilestonesService with RepositoryService
with ReadableRepositoryAuthenticator with WritableRepositoryAuthenticator =>
case class MilestoneForm(title: String, description: Option[String], dueDate: Option[java.util.Date])
val milestoneForm = mapping(
"title" -> trim(label("Title", text(required, maxlength(100)))),
"description" -> trim(label("Description", optional(text()))),
"dueDate" -> trim(label("Due Date", optional(date())))
)(MilestoneForm.apply)
get("/:owner/:repository/issues/milestones")(readableRepository {
val owner = params("owner")
val repository = params("repository")
val state = params.getOrElse("state", "open")
getRepository(owner, repository, baseUrl) match {
case None => NotFound()
case Some(r) => issues.html.milestones(state, getMilestones(owner, repository),
getMilestoneIssueCounts(owner, repository), r, isWritable(owner, repository, context.loginAccount))
}
})
get("/:owner/:repository/issues/milestones/new")(writableRepository {
val owner = params("owner")
val repository = params("repository")
getRepository(owner, repository, baseUrl) match {
case None => NotFound()
case Some(r) => issues.html.milestoneedit(None, r)
}
})
post("/:owner/:repository/issues/milestones/new", milestoneForm)(writableRepository { form =>
val owner = params("owner")
val repository = params("repository")
createMilestone(owner, repository, form.title, form.description, form.dueDate)
redirect("/%s/%s/issues/milestones".format(owner, repository))
})
get("/:owner/:repository/issues/milestones/:milestoneId/edit")(writableRepository {
val owner = params("owner")
val repository = params("repository")
val milestoneId = params("milestoneId").toInt
getRepository(owner, repository, baseUrl) match {
case None => NotFound()
case Some(r) => issues.html.milestoneedit(getMilestone(owner, repository, milestoneId), r)
}
})
post("/:owner/:repository/issues/milestones/:milestoneId/edit", milestoneForm)(writableRepository { form =>
val owner = params("owner")
val repository = params("repository")
val milestoneId = params("milestoneId").toInt
getMilestone(owner, repository, milestoneId) match {
case None => NotFound()
case Some(m) => {
updateMilestone(m.copy(title = form.title, description = form.description, dueDate = form.dueDate))
redirect("/%s/%s/issues/milestones".format(owner, repository))
}
}
})
get("/:owner/:repository/issues/milestones/:milestoneId/close")(writableRepository {
val owner = params("owner")
val repository = params("repository")
val milestoneId = params("milestoneId").toInt
getMilestone(owner, repository, milestoneId) match {
case None => NotFound()
case Some(m) => {
closeMilestone(m)
redirect("/%s/%s/issues/milestones".format(owner, repository))
}
}
})
get("/:owner/:repository/issues/milestones/:milestoneId/open")(writableRepository {
val owner = params("owner")
val repository = params("repository")
val milestoneId = params("milestoneId").toInt
getMilestone(owner, repository, milestoneId) match {
case None => NotFound()
case Some(m) => {
openMilestone(m)
redirect("/%s/%s/issues/milestones".format(owner, repository))
}
}
})
get("/:owner/:repository/issues/milestones/:milestoneId/delete")(writableRepository {
val owner = params("owner")
val repository = params("repository")
val milestoneId = params("milestoneId").toInt
getMilestone(owner, repository, milestoneId) match {
case None => NotFound()
case Some(m) => {
deleteMilestone(owner, repository, milestoneId)
redirect("/%s/%s/issues/milestones".format(owner, repository))
}
}
})
}