diff options
author | ktomskikh <ktomskih@datamonsters.co> | 2017-09-25 16:42:02 +0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-09-25 16:42:02 +0700 |
commit | 969ddd91fd5fd6ad2f177be408e598b64f2d615c (patch) | |
tree | 8219b5b5d912d562cdc5480059334f3922b517e9 /src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats | |
parent | 07602feb5da0914a09103e1f1775e718ab768445 (diff) | |
parent | 25ccda10b3b7f16f9fcee0b41c4abd035b3d1330 (diff) | |
download | rest-query-969ddd91fd5fd6ad2f177be408e598b64f2d615c.tar.gz rest-query-969ddd91fd5fd6ad2f177be408e598b64f2d615c.tar.bz2 rest-query-969ddd91fd5fd6ad2f177be408e598b64f2d615c.zip |
Merge pull request #28 from drivergroup/PDSUI-2259v0.3.17
PDSUI-2259 Added create and delete endpoint for intervention service
Diffstat (limited to 'src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats')
-rw-r--r-- | src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/intervention.scala | 52 |
1 files changed, 50 insertions, 2 deletions
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 { |