aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksandr <ognelisar@gmail.com>2017-10-10 16:36:39 +0700
committerAleksandr <ognelisar@gmail.com>2017-10-10 16:36:39 +0700
commitc32f965212481e4d26c2ae1ae5616f2d4b3e22ae (patch)
tree83256b9ede9cab2b54c2f2b2987e77c7d8959515
parentd9bb907bc15445dd2db14be8c033fcfce2fd59c1 (diff)
downloadrest-query-c32f965212481e4d26c2ae1ae5616f2d4b3e22ae.tar.gz
rest-query-c32f965212481e4d26c2ae1ae5616f2d4b3e22ae.tar.bz2
rest-query-c32f965212481e4d26c2ae1ae5616f2d4b3e22ae.zip
Fixed patientcriterion format; Added format for ListResponse
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/ListResponse.scala39
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientcriterion.scala20
-rw-r--r--src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/ListResponseSuite.scala2
-rw-r--r--src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/PatientCriterionFormatSuite.scala4
4 files changed, 45 insertions, 20 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..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,
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 2e7481a..1a1e76c 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
@@ -101,7 +101,7 @@ 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(
diff --git a/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/PatientCriterionFormatSuite.scala b/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/PatientCriterionFormatSuite.scala
index 623b3a9..054a1df 100644
--- a/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/PatientCriterionFormatSuite.scala
+++ b/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/PatientCriterionFormatSuite.scala
@@ -39,8 +39,8 @@ class PatientCriterionFormatSuite extends FlatSpec with Matchers {
"criterionIsDefining":false,"criterionIsCompound":false,"eligibilityStatus":"Yes","verifiedEligibilityStatus":null,
"isVisible":true,"isVerified":true,"lastUpdate":"2017-08-10T18:00Z","arms":["arm 31","arm 32"]}""".parseJson)
- val updatePatientCriterionJson = """{"verifiedEligibilityStatus":"No"}""".parseJson
- val expectedUpdatedPatientCriterion = orig.copy(verifiedEligibilityStatus = Some(FuzzyValue.No))
+ val updatePatientCriterionJson = """{"verifiedEligibilityStatus":"No","eligibilityStatus":null}""".parseJson
+ val expectedUpdatedPatientCriterion = orig.copy(verifiedEligibilityStatus = Some(FuzzyValue.No),eligibilityStatus = None)
val parsedUpdatePatientCriterion = applyUpdateToPatientCriterion(updatePatientCriterionJson, orig)
parsedUpdatePatientCriterion should be(expectedUpdatedPatientCriterion)