From 25ccda10b3b7f16f9fcee0b41c4abd035b3d1330 Mon Sep 17 00:00:00 2001 From: kseniya Date: Mon, 25 Sep 2017 14:10:31 +0700 Subject: Created json format for create intervention --- .../json/intervention/ApiPartialIntervention.scala | 6 +-- .../formats/json/sprayformats/intervention.scala | 52 +++++++++++++++++++++- 2 files changed, 53 insertions(+), 5 deletions(-) (limited to 'src/main/scala/xyz/driver/pdsuidomain/formats/json') diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/intervention/ApiPartialIntervention.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/intervention/ApiPartialIntervention.scala index 09e0b23..e7f69a9 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/intervention/ApiPartialIntervention.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/intervention/ApiPartialIntervention.scala @@ -20,7 +20,7 @@ final case class ApiPartialIntervention(name: Option[String], def applyTo(orig: InterventionWithArms): InterventionWithArms = { val origIntervention = orig.intervention - val draftArmList = arms.map(_.map(x => InterventionArm(LongId(x), orig.intervention.id))) + val draftArmList = arms.map(_.map(x => InterventionArm(armId = LongId(x), interventionId = orig.intervention.id))) orig.copy( intervention = origIntervention.copy( typeId = typeId.map(LongId(_)).orElse(origIntervention.typeId), @@ -31,7 +31,6 @@ final case class ApiPartialIntervention(name: Option[String], ) } - //TODO: need to discuss def toDomain: Try[InterventionWithArms] = Try { val validation = Map(JsPath \ "trialId" -> AdditionalConstraints.optionNonEmptyConstraint(trialId)) @@ -52,7 +51,8 @@ final case class ApiPartialIntervention(name: Option[String], originalDosage = dosage.getOrElse(""), isActive = isActive.getOrElse(false) ), - arms = arms.map(_.map(x => InterventionArm(LongId(x), LongId(0)))).getOrElse(List.empty) + arms = + arms.map(_.map(x => InterventionArm(armId = LongId(x), interventionId = LongId(0)))).getOrElse(List.empty) ) } else { throw new JsonValidationException(validationErrors) diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/intervention.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/intervention.scala index 9314391..717c1a9 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/intervention.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/intervention.scala @@ -1,14 +1,14 @@ package xyz.driver.pdsuidomain.formats.json.sprayformats import spray.json._ -import xyz.driver.pdsuicommon.domain.LongId +import xyz.driver.pdsuicommon.domain.{LongId, StringId} import xyz.driver.pdsuidomain.entities._ object intervention { import DefaultJsonProtocol._ import common._ - implicit val interventionWriter: JsonWriter[InterventionWithArms] = new JsonWriter[InterventionWithArms] { + implicit val interventionFormat: JsonFormat[InterventionWithArms] = new RootJsonFormat[InterventionWithArms] { override def write(obj: InterventionWithArms) = JsObject( "id" -> obj.intervention.id.toJson, @@ -22,6 +22,54 @@ object intervention { "originalDosage" -> obj.intervention.originalDosage.toJson, "originalType" -> obj.intervention.originalType.toJson ) + + override def read(json: JsValue): InterventionWithArms = json match { + case JsObject(fields) => + val trialId = fields + .get("trialId") + .map(_.convertTo[StringId[Trial]]) + .getOrElse(deserializationError(s"Intervention json object does not contain `trialId` field: $json")) + + val typeId = fields + .get("typeId") + .map(_.convertTo[LongId[InterventionType]]) + + val name = fields + .get("name") + .map(_.convertTo[String]) + .getOrElse("") + + val dosage = fields + .get("dosage") + .map(_.convertTo[String]) + .getOrElse("") + + val isActive = fields + .get("isActive") + .exists(_.convertTo[Boolean]) + + val arms = fields + .get("arms") + .map(_.convertTo[List[LongId[Arm]]].map(x => InterventionArm(armId = x, interventionId = LongId(0)))) + .getOrElse(List.empty[InterventionArm]) + + InterventionWithArms( + intervention = Intervention( + id = LongId(0), + trialId = trialId, + name = name, + originalName = name, + typeId = typeId, + originalType = None, + dosage = dosage, + originalDosage = dosage, + isActive = isActive + ), + arms = arms + ) + + case _ => deserializationError(s"Expected Json Object as create Intervention json, but got $json") + } } def applyUpdateToInterventionWithArms(json: JsValue, orig: InterventionWithArms): InterventionWithArms = json match { -- cgit v1.2.3