From c32f965212481e4d26c2ae1ae5616f2d4b3e22ae Mon Sep 17 00:00:00 2001 From: Aleksandr Date: Tue, 10 Oct 2017 16:36:39 +0700 Subject: Fixed patientcriterion format; Added format for ListResponse --- .../formats/json/sprayformats/ListResponse.scala | 39 ++++++++++++++++++---- .../json/sprayformats/patientcriterion.scala | 20 +++++------ 2 files changed, 42 insertions(+), 17 deletions(-) (limited to 'src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats') 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..d294b38 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 @@ -10,7 +10,7 @@ final case class ListResponse[+T](items: Seq[T], meta: ListResponse.Meta) object ListResponse extends DefaultJsonProtocol { private val itemsField = "items" - private val metaField = "meta" + private val metaField = "meta" final case class Meta(itemsCount: Int, pageNumber: Int, pageSize: Int, lastUpdate: Option[LocalDateTime]) @@ -27,13 +27,40 @@ object ListResponse extends DefaultJsonProtocol { implicit val listResponseMetaFormat: RootJsonFormat[Meta] = jsonFormat4(Meta.apply) - implicit def listResponseMetaWriter[T: JsonWriter]: RootJsonWriter[ListResponse[T]] = + private def listResponseJsonWriter[T: JsonWriter](listResponse: ListResponse[T]) = { + JsObject( + itemsField -> listResponse.items.map(_.toJson).toJson, + metaField -> listResponse.meta.toJson + ) + } + + implicit def listResponseWriter[T: JsonWriter]: RootJsonWriter[ListResponse[T]] = new RootJsonWriter[ListResponse[T]] { override def write(listResponse: ListResponse[T]): JsValue = { - JsObject( - itemsField -> listResponse.items.map(_.toJson).toJson, - metaField -> listResponse.meta.toJson - ) + listResponseJsonWriter(listResponse) + } + } + + implicit def listResponseFormat[T: RootJsonFormat]: RootJsonFormat[ListResponse[T]] = + new RootJsonFormat[ListResponse[T]] { + override def write(listResponse: ListResponse[T]): JsValue = { + listResponseJsonWriter(listResponse) + } + + override def read(json: JsValue): ListResponse[T] = json match { + case JsObject(fields) => + val items = fields + .get(itemsField) + .map(_.convertTo[Seq[T]]) + .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 affb346..87e2a3a 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 @@ -11,17 +11,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[FuzzyValue]) - } else orig.eligibilityStatus - - val verifiedEligibilityStatus = if (fields.contains("verifiedEligibilityStatus")) { - fields - .get("verifiedEligibilityStatus") - .map(_.convertTo[FuzzyValue]) - } else orig.verifiedEligibilityStatus + val eligibilityStatus = fields + .get("eligibilityStatus") + .map(_.convertTo[Option[FuzzyValue]]) + .getOrElse(orig.eligibilityStatus) + + val verifiedEligibilityStatus = fields + .get("verifiedEligibilityStatus") + .map(_.convertTo[Option[FuzzyValue]]) + .getOrElse(orig.verifiedEligibilityStatus) orig.copy( eligibilityStatus = eligibilityStatus, -- cgit v1.2.3