diff options
author | Li Haoyi <haoyi.sg@gmail.com> | 2018-08-08 15:53:37 +0800 |
---|---|---|
committer | Li Haoyi <haoyi.sg@gmail.com> | 2018-08-08 18:24:18 +0800 |
commit | d85fd093539bdd7d8d432b058c2e2225eaa1ee2b (patch) | |
tree | 1b10e0cdcea08a51255152e259e446a75ec57ead /cask/src/cask/endpoints | |
parent | a5320694193fd86b639c53a91fa24fb7f8ea914e (diff) | |
download | cask-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.scala | 5 | ||||
-rw-r--r-- | cask/src/cask/endpoints/JsonEndpoint.scala | 5 | ||||
-rw-r--r-- | cask/src/cask/endpoints/StaticEndpoints.scala | 8 | ||||
-rw-r--r-- | cask/src/cask/endpoints/WebEndpoints.scala | 5 |
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 |