diff options
author | vlad <vlad@drivergrp.com> | 2016-08-15 17:22:38 -0700 |
---|---|---|
committer | vlad <vlad@drivergrp.com> | 2016-08-15 17:22:38 -0700 |
commit | d6237e4cef0f912e2acc7d55e7787caab550aebe (patch) | |
tree | ff2a1bb2b6cfcc6417e12fb5b730801720cfda53 /src | |
parent | 8a0c92de6c6481a055cfa482e875b31087a3ff41 (diff) | |
download | driver-core-d6237e4cef0f912e2acc7d55e7787caab550aebe.tar.gz driver-core-d6237e4cef0f912e2acc7d55e7787caab550aebe.tar.bz2 driver-core-d6237e4cef0f912e2acc7d55e7787caab550aebe.zip |
More cases for exception handler + Implicits back from the companion objects + Formatting
Diffstat (limited to 'src')
-rw-r--r-- | src/main/scala/com/drivergrp/core/app.scala | 29 | ||||
-rw-r--r-- | src/main/scala/com/drivergrp/core/core.scala | 15 | ||||
-rw-r--r-- | src/main/scala/com/drivergrp/core/json.scala | 6 |
3 files changed, 37 insertions, 13 deletions
diff --git a/src/main/scala/com/drivergrp/core/app.scala b/src/main/scala/com/drivergrp/core/app.scala index ba18e92..a3ccd9e 100644 --- a/src/main/scala/com/drivergrp/core/app.scala +++ b/src/main/scala/com/drivergrp/core/app.scala @@ -16,6 +16,7 @@ import com.typesafe.config.Config import org.slf4j.LoggerFactory import spray.json.DefaultJsonProtocol +import scala.compat.Platform.ConcurrentModificationException import scala.concurrent.Await import scala.concurrent.duration._ @@ -59,14 +60,38 @@ object app { val versionRt = versionRoute(version, buildNumber) val generalExceptionHandler = ExceptionHandler { + + case is: IllegalStateException => + extractUri { uri => + // TODO: extract `requestUuid` from request or thread, provided by linkerd/zipkin + def requestUuid = java.util.UUID.randomUUID.toString + + log.debug(s"Request is not allowed to $uri ($requestUuid)", is) + complete( + HttpResponse(BadRequest, + entity = s"""{ "requestUuid": "$requestUuid", "message": "${is.getMessage}" }""")) + } + + case cm: ConcurrentModificationException => + extractUri { uri => + // TODO: extract `requestUuid` from request or thread, provided by linkerd/zipkin + def requestUuid = java.util.UUID.randomUUID.toString + + log.debug(s"Concurrent modification of the resource $uri ($requestUuid)", cm) + complete( + HttpResponse(Conflict, + entity = s"""{ "requestUuid": "$requestUuid", "message": "${cm.getMessage}" }""")) + } + case t: Throwable => extractUri { uri => // TODO: extract `requestUuid` from request or thread, provided by linkerd/zipkin def requestUuid = java.util.UUID.randomUUID.toString log.error(s"Request to $uri could not be handled normally ($requestUuid)", t) - complete(HttpResponse(InternalServerError, - entity = s"""{ "requestUuid": "$requestUuid", "message": "${t.getMessage}" }""")) + complete( + HttpResponse(InternalServerError, + entity = s"""{ "requestUuid": "$requestUuid", "message": "${t.getMessage}" }""")) } } diff --git a/src/main/scala/com/drivergrp/core/core.scala b/src/main/scala/com/drivergrp/core/core.scala index cfa96e7..5bfe017 100644 --- a/src/main/scala/com/drivergrp/core/core.scala +++ b/src/main/scala/com/drivergrp/core/core.scala @@ -28,24 +28,21 @@ package object core { type Id[+Tag] = Long @@ Tag object Id { def apply[Tag](value: Long) = value.asInstanceOf[Id[Tag]] - - implicit def idEqual[T]: Equal[Id[T]] = Equal.equal[Id[T]](_ == _) - implicit def idOrdering[T]: Ordering[Id[T]] = Ordering.by(identity) } + implicit def idEqual[T]: Equal[Id[T]] = Equal.equal[Id[T]](_ == _) + implicit def idOrdering[T]: Ordering[Id[T]] = Ordering.by(identity) type Name[+Tag] = String @@ Tag object Name { def apply[Tag](value: String) = value.asInstanceOf[Name[Tag]] - - implicit def nameEqual[T]: Equal[Name[T]] = Equal.equal[Name[T]](_ == _) - implicit def nameOrdering[T]: Ordering[Name[T]] = Ordering.by(identity) } + implicit def nameEqual[T]: Equal[Name[T]] = Equal.equal[Name[T]](_ == _) + implicit def nameOrdering[T]: Ordering[Name[T]] = Ordering.by(identity) + object revision { final case class Revision[T](id: UUID) - object Revision { - implicit def revisionEqual[T]: Equal[Revision[T]] = Equal.equal[Revision[T]](_.id == _.id) - } + implicit def revisionEqual[T]: Equal[Revision[T]] = Equal.equal[Revision[T]](_.id == _.id) } } diff --git a/src/main/scala/com/drivergrp/core/json.scala b/src/main/scala/com/drivergrp/core/json.scala index 39a07ae..0ac7d04 100644 --- a/src/main/scala/com/drivergrp/core/json.scala +++ b/src/main/scala/com/drivergrp/core/json.scala @@ -73,14 +73,16 @@ object json { } implicit def revisionFromStringUnmarshaller[T]: Unmarshaller[String, Revision[T]] = - Unmarshaller.strict[String, Revision[T]] { string => Revision[T](UUID.fromString(string)) } + Unmarshaller.strict[String, Revision[T]] { string => + Revision[T](UUID.fromString(string)) + } implicit def revisionFormat[T] = new RootJsonFormat[Revision[T]] { def write(revision: Revision[T]) = JsString(revision.id.toString) def read(value: JsValue): Revision[T] = value match { case JsString(revision) => Revision[T](UUID.fromString(revision)) - case _ => throw new DeserializationException("Revision expects uuid string") + case _ => throw new DeserializationException("Revision expects uuid string") } } |