diff --git a/src/main/scala/app/IssuesController.scala b/src/main/scala/app/IssuesController.scala index 4ecdf53..38f617d 100644 --- a/src/main/scala/app/IssuesController.scala +++ b/src/main/scala/app/IssuesController.scala @@ -148,4 +148,18 @@ } } }) + + 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)) + } + } + }) } \ No newline at end of file diff --git a/src/main/scala/service/IssuesService.scala b/src/main/scala/service/IssuesService.scala index 7514819..b7e6666 100644 --- a/src/main/scala/service/IssuesService.scala +++ b/src/main/scala/service/IssuesService.scala @@ -65,6 +65,17 @@ milestone.dueDate, milestone.closedDate) + def deleteMilestone(owner: String, repository: String, milestoneId: Int): Unit = { + Query(Issues) + .filter { i => (i.userName is owner.bind) && (i.repositoryName is repository.bind) && (i.milestoneId is milestoneId.bind)} + .map { i => i.milestoneId.? } + .update(None) + + Query(Milestones) + .filter { i => (i.userName is owner.bind) && (i.repositoryName is repository.bind) && (i.milestoneId is milestoneId.bind)} + .delete + } + def getMilestone(owner: String, repository: String, milestoneId: Int): Option[Milestone] = Query(Milestones) .filter(m => (m.userName is owner.bind) && (m.repositoryName is repository.bind) && (m.milestoneId is milestoneId.bind)) diff --git a/src/main/twirl/issues/milestones.scala.html b/src/main/twirl/issues/milestones.scala.html index 3a48444..9fab1ea 100644 --- a/src/main/twirl/issues/milestones.scala.html +++ b/src/main/twirl/issues/milestones.scala.html @@ -54,7 +54,7 @@ } else { Close } - Delete + Delete } Browse issues @@ -86,6 +86,13 @@ } +