aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/xyz/driver/pdsuidomain/formats/json/trial.scala
diff options
context:
space:
mode:
authorvlad <vlad@driver.xyz>2017-10-30 14:21:55 -0700
committervlad <vlad@driver.xyz>2017-10-30 14:21:55 -0700
commit78f467dd0b3b9f35bb49ae973b26fb37c458b138 (patch)
treee45ec25c7d914bed07774d862d59fdaa56fd6d60 /src/main/scala/xyz/driver/pdsuidomain/formats/json/trial.scala
parent604fbf0a7a082bc440c0778abd6f90005b210c16 (diff)
downloadrest-query-78f467dd0b3b9f35bb49ae973b26fb37c458b138.tar.gz
rest-query-78f467dd0b3b9f35bb49ae973b26fb37c458b138.tar.bz2
rest-query-78f467dd0b3b9f35bb49ae973b26fb37c458b138.zip
Fixing Patients and Trials parsing, some refined to tryv0.11.1
Diffstat (limited to 'src/main/scala/xyz/driver/pdsuidomain/formats/json/trial.scala')
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/trial.scala100
1 files changed, 96 insertions, 4 deletions
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/trial.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/trial.scala
index 6cc2560..dc9c5e0 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/trial.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/trial.scala
@@ -1,10 +1,10 @@
package xyz.driver.pdsuidomain.formats.json
-import java.time.{ZoneId, ZonedDateTime}
+import java.time.{LocalDateTime, ZoneId, ZonedDateTime}
import spray.json._
import xyz.driver.core.json.EnumJsonFormat
-import xyz.driver.pdsuicommon.domain.{LongId, UuidId}
+import xyz.driver.pdsuicommon.domain.{LongId, StringId, User, UuidId}
import xyz.driver.pdsuidomain.entities._
object trial {
@@ -12,7 +12,7 @@ object trial {
import Trial._
import common._
- implicit val trialStatusFormat = new EnumJsonFormat[Status](
+ implicit val trialStatusFormat: RootJsonFormat[Status] = new EnumJsonFormat[Status](
"New" -> Status.New,
"ReviewSummary" -> Status.ReviewSummary,
"Summarized" -> Status.Summarized,
@@ -47,7 +47,99 @@ object trial {
"originalTitle" -> obj.originalTitle.toJson
)
- override def read(json: JsValue): Trial = jsonReader[Trial].read(json)
+ override def read(json: JsValue): Trial = {
+ json match {
+ case JsObject(fields) =>
+ val id = fields
+ .get("id")
+ .map(_.convertTo[StringId[Trial]])
+ .getOrElse(deserializationError(s"Trial create json object does not contain `id` field: $json"))
+ val externalid = fields
+ .get("externalid")
+ .map(_.convertTo[UuidId[Trial]])
+ .getOrElse(deserializationError(s"Trial create json object does not contain `externalid` field: $json"))
+ val status = fields
+ .get("status")
+ .map(_.convertTo[Trial.Status])
+ .getOrElse(deserializationError(s"Trial create json object does not contain `status` field: $json"))
+ val assignee = fields
+ .get("assignee")
+ .flatMap(_.convertTo[Option[StringId[User]]])
+ val previousStatus = fields
+ .get("previousStatus")
+ .flatMap(_.convertTo[Option[Trial.Status]])
+ val previousAssignee = fields
+ .get("previousAssignee")
+ .flatMap(_.convertTo[Option[StringId[User]]])
+ val lastActiveUser = fields
+ .get("lastActiveUser")
+ .flatMap(_.convertTo[Option[StringId[User]]])
+ val lastUpdate = fields
+ .get("lastUpdate")
+ .map(_.convertTo[LocalDateTime])
+ .getOrElse(deserializationError(s"Trial create json object does not contain `lastUpdate` field: $json"))
+ val phase = fields
+ .get("phase")
+ .map(_.convertTo[String])
+ .getOrElse(deserializationError(s"Trial create json object does not contain `phase` field: $json"))
+ val hypothesisId = fields
+ .get("hypothesisId")
+ .flatMap(_.convertTo[Option[UuidId[Hypothesis]]])
+ val studyDesignId = fields
+ .get("studyDesignId")
+ .flatMap(_.convertTo[Option[LongId[StudyDesign]]])
+ val originalStudyDesignId = fields
+ .get("originalStudyDesignId")
+ .flatMap(_.convertTo[Option[String]])
+ val isPartner = fields
+ .get("isPartner")
+ .map(_.convertTo[Boolean])
+ .getOrElse(deserializationError(s"Trial create json object does not contain `isPartner` field: $json"))
+ val overview = fields
+ .get("overview")
+ .flatMap(_.convertTo[Option[String]])
+ val overviewTemplate = fields
+ .get("overviewTemplate")
+ .map(_.convertTo[String])
+ .getOrElse(
+ deserializationError(s"Trial create json object does not contain `overviewTemplate` field: $json"))
+ val isUpdated = fields
+ .get("isUpdated")
+ .map(_.convertTo[Boolean])
+ .getOrElse(deserializationError(s"Trial create json object does not contain `isUpdated` field: $json"))
+ val title = fields
+ .get("title")
+ .map(_.convertTo[String])
+ .getOrElse(deserializationError(s"Trial create json object does not contain `title` field: $json"))
+ val originalTitle = fields
+ .get("originalTitle")
+ .map(_.convertTo[String])
+ .getOrElse(deserializationError(s"Trial create json object does not contain `originalTitle` field: $json"))
+
+ Trial(
+ id,
+ externalid,
+ status,
+ assignee,
+ previousStatus,
+ previousAssignee,
+ lastActiveUser,
+ lastUpdate,
+ phase,
+ hypothesisId,
+ studyDesignId,
+ originalStudyDesignId,
+ isPartner,
+ overview,
+ overviewTemplate,
+ isUpdated,
+ title,
+ originalTitle
+ )
+
+ case _ => deserializationError(s"Expected Json Object as Trial, but got $json")
+ }
+ }
}
def applyUpdateToTrial(json: JsValue, orig: Trial): Trial = json match {