aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVlad Uspensky <v.uspenskiy@icloud.com>2017-10-12 08:48:35 -0700
committerGitHub <noreply@github.com>2017-10-12 08:48:35 -0700
commitf3b809659969ee29ab7f0a62ec1cff25a3e263dc (patch)
tree6150d30086c7cfa9aac2cdbd33e755863b2a7e74
parent623289020c91dfd4cb38ce23cac77d735b31c3be (diff)
parentf49ba1bd0b14073dd263b5cce499250c8a4419b2 (diff)
downloadrest-query-0.8.7.tar.gz
rest-query-0.8.7.tar.bz2
rest-query-0.8.7.zip
Merge pull request #42 from drivergroup/PDSUI-list-responsev0.8.7
Fixed patientcriterion format; Added format for ListResponse
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/ListResponse.scala29
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientcriterion.scala18
-rw-r--r--src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/ListResponseSuite.scala3
3 files changed, 36 insertions, 14 deletions
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/ListResponse.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/ListResponse.scala
index 2a670c4..4afe0ee 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/ListResponse.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/ListResponse.scala
@@ -2,13 +2,14 @@ package xyz.driver.pdsuidomain.formats.json.sprayformats
import java.time.LocalDateTime
-import spray.json.{RootJsonFormat, _}
+import spray.json._
+import spray.json.DefaultJsonProtocol._
import xyz.driver.pdsuicommon.db.Pagination
import xyz.driver.pdsuidomain.formats.json.sprayformats.common._
final case class ListResponse[+T](items: Seq[T], meta: ListResponse.Meta)
-object ListResponse extends DefaultJsonProtocol {
+object ListResponse {
private val itemsField = "items"
private val metaField = "meta"
@@ -27,7 +28,7 @@ object ListResponse extends DefaultJsonProtocol {
implicit val listResponseMetaFormat: RootJsonFormat[Meta] = jsonFormat4(Meta.apply)
- implicit def listResponseMetaWriter[T: JsonWriter]: RootJsonWriter[ListResponse[T]] =
+ implicit def listResponseWriter[T: JsonWriter]: RootJsonWriter[ListResponse[T]] =
new RootJsonWriter[ListResponse[T]] {
override def write(listResponse: ListResponse[T]): JsValue = {
JsObject(
@@ -36,4 +37,26 @@ object ListResponse extends DefaultJsonProtocol {
)
}
}
+
+ implicit def listResponseReader[T: JsonReader]: RootJsonReader[ListResponse[T]] =
+ new RootJsonReader[ListResponse[T]] {
+ override def read(json: JsValue): ListResponse[T] = json match {
+ case JsObject(fields) =>
+ val items = fields
+ .get(itemsField)
+ .map {
+ case JsArray(elements) => elements.map(_.convertTo[T])(collection.breakOut)
+ case x => deserializationError(s"Expected Array as JsArray, but got $x")
+ }
+ .getOrElse(deserializationError(s"ListResponse json object does not contain `$itemsField` field: $json"))
+
+ val meta = fields
+ .get(metaField)
+ .map(_.convertTo[Meta])
+ .getOrElse(deserializationError(s"ListResponse json object does not contain `$metaField` field: $json"))
+
+ ListResponse(items, meta)
+ case _ => deserializationError(s"Expected ListResponse json object, but got $json")
+ }
+ }
}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientcriterion.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientcriterion.scala
index 7e8c220..f41c846 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientcriterion.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientcriterion.scala
@@ -12,17 +12,15 @@ object patientcriterion {
def applyUpdateToPatientCriterion(json: JsValue, orig: PatientCriterion): PatientCriterion = json match {
case JsObject(fields) =>
- val eligibilityStatus = if (fields.contains("eligibilityStatus")) {
- fields
- .get("eligibilityStatus")
- .map(_.convertTo[LabelValue])
- } else orig.eligibilityStatus
+ val eligibilityStatus = fields
+ .get("eligibilityStatus")
+ .map(_.convertTo[Option[LabelValue]])
+ .getOrElse(orig.eligibilityStatus)
- val verifiedEligibilityStatus = if (fields.contains("verifiedEligibilityStatus")) {
- fields
- .get("verifiedEligibilityStatus")
- .map(_.convertTo[LabelValue])
- } else orig.verifiedEligibilityStatus
+ val verifiedEligibilityStatus = fields
+ .get("verifiedEligibilityStatus")
+ .map(_.convertTo[Option[LabelValue]])
+ .getOrElse(orig.verifiedEligibilityStatus)
orig.copy(
eligibilityStatus = eligibilityStatus,
diff --git a/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/ListResponseSuite.scala b/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/ListResponseSuite.scala
index d7f1a9b..40739f6 100644
--- a/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/ListResponseSuite.scala
+++ b/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/ListResponseSuite.scala
@@ -96,7 +96,8 @@ class ListResponseSuite extends FlatSpec with Matchers {
val listResponse = ListResponse(Seq(orig), meta)
- val writtenJson = ListResponse.listResponseMetaWriter.write(listResponse)
+
+ val writtenJson = ListResponse.listResponseWriter.write(listResponse)
val expectedJson = s"""{"items":[$recordJsonAsString],"meta":${metaJsonObjectAsString(meta)}}"""
writtenJson should be(expectedJson.parseJson)