diff options
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.scala | 100 |
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 { |