summaryrefslogtreecommitdiff
path: root/cask/src/cask/endpoints
diff options
context:
space:
mode:
authorLi Haoyi <haoyi.sg@gmail.com>2018-08-08 15:53:37 +0800
committerLi Haoyi <haoyi.sg@gmail.com>2018-08-08 18:24:18 +0800
commitd85fd093539bdd7d8d432b058c2e2225eaa1ee2b (patch)
tree1b10e0cdcea08a51255152e259e446a75ec57ead /cask/src/cask/endpoints
parenta5320694193fd86b639c53a91fa24fb7f8ea914e (diff)
downloadcask-d85fd093539bdd7d8d432b058c2e2225eaa1ee2b.tar.gz
cask-d85fd093539bdd7d8d432b058c2e2225eaa1ee2b.tar.bz2
cask-d85fd093539bdd7d8d432b058c2e2225eaa1ee2b.zip
Properly roll back transactions when endpoints fail in TodoMvcDb
Diffstat (limited to 'cask/src/cask/endpoints')
-rw-r--r--cask/src/cask/endpoints/FormEndpoint.scala5
-rw-r--r--cask/src/cask/endpoints/JsonEndpoint.scala5
-rw-r--r--cask/src/cask/endpoints/StaticEndpoints.scala8
-rw-r--r--cask/src/cask/endpoints/WebEndpoints.scala5
4 files changed, 12 insertions, 11 deletions
diff --git a/cask/src/cask/endpoints/FormEndpoint.scala b/cask/src/cask/endpoints/FormEndpoint.scala
index 4e8feb3..48190ce 100644
--- a/cask/src/cask/endpoints/FormEndpoint.scala
+++ b/cask/src/cask/endpoints/FormEndpoint.scala
@@ -43,12 +43,13 @@ object FormReader{
def read(ctx: ParamContext, label: String, input: Seq[FormEntry]) = input.map(_.asInstanceOf[FormFile])
}
}
-class postForm(val path: String, override val subpath: Boolean = false) extends Endpoint[Response]{
+class postForm(val path: String, override val subpath: Boolean = false) extends Endpoint{
+ type Output = Response
val methods = Seq("post")
type Input = Seq[FormEntry]
type InputParser[T] = FormReader[T]
- def wrapMethodOutput(ctx: ParamContext,
+ def wrapFunction(ctx: ParamContext,
delegate: Map[String, Input] => Router.Result[Output]): Router.Result[Response] = {
try {
val formData = FormParserFactory.builder().build().createParser(ctx.exchange).parseBlocking()
diff --git a/cask/src/cask/endpoints/JsonEndpoint.scala b/cask/src/cask/endpoints/JsonEndpoint.scala
index 3c960d2..fdbbbec 100644
--- a/cask/src/cask/endpoints/JsonEndpoint.scala
+++ b/cask/src/cask/endpoints/JsonEndpoint.scala
@@ -24,12 +24,13 @@ object JsReader{
}
}
}
-class postJson(val path: String, override val subpath: Boolean = false) extends Endpoint[Response]{
+class postJson(val path: String, override val subpath: Boolean = false) extends Endpoint{
+ type Output = Response
val methods = Seq("post")
type Input = ujson.Js.Value
type InputParser[T] = JsReader[T]
- def wrapMethodOutput(ctx: ParamContext,
+ def wrapFunction(ctx: ParamContext,
delegate: Map[String, Input] => Router.Result[Output]): Router.Result[Response] = {
val obj = for{
str <-
diff --git a/cask/src/cask/endpoints/StaticEndpoints.scala b/cask/src/cask/endpoints/StaticEndpoints.scala
index 173cdac..048f89a 100644
--- a/cask/src/cask/endpoints/StaticEndpoints.scala
+++ b/cask/src/cask/endpoints/StaticEndpoints.scala
@@ -4,15 +4,13 @@ import cask.internal.Router
import cask.main.Endpoint
import cask.model.{Response, ParamContext}
-class static(val path: String) extends Endpoint[String] {
+class static(val path: String) extends Endpoint {
+ type Output = String
val methods = Seq("get")
type Input = Seq[String]
type InputParser[T] = QueryParamReader[T]
override def subpath = true
- def wrapOutput(t: String) = t
-
- def wrapMethodOutput(ctx: ParamContext,
- delegate: Map[String, Input] => Router.Result[String]): Router.Result[Response] = {
+ def wrapFunction(ctx: ParamContext, delegate: Delegate): Returned = {
delegate(Map()) match{
case Router.Result.Success(t) => Router.Result.Success(cask.model.Static(t + "/" + ctx.remaining.mkString("/")))
case e: Router.Result.Error => e
diff --git a/cask/src/cask/endpoints/WebEndpoints.scala b/cask/src/cask/endpoints/WebEndpoints.scala
index c37a73a..70d16e0 100644
--- a/cask/src/cask/endpoints/WebEndpoints.scala
+++ b/cask/src/cask/endpoints/WebEndpoints.scala
@@ -7,10 +7,11 @@ import cask.model.{Response, ParamContext}
import collection.JavaConverters._
-trait WebEndpoint extends Endpoint[Response]{
+trait WebEndpoint extends Endpoint{
+ type Output = Response
type Input = Seq[String]
type InputParser[T] = QueryParamReader[T]
- def wrapMethodOutput(ctx: ParamContext,
+ def wrapFunction(ctx: ParamContext,
delegate: Map[String, Input] => Router.Result[Output]): Router.Result[Response] = {
delegate(
ctx.exchange.getQueryParameters