aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkseniya <ktomskih@datamonsters.co>2017-09-25 14:10:31 +0700
committerkseniya <ktomskih@datamonsters.co>2017-09-25 14:10:31 +0700
commit25ccda10b3b7f16f9fcee0b41c4abd035b3d1330 (patch)
treebc784fbf5301ecb5569a07128619f6daed8e7c72
parent49cda2524a2537cb9330af488ca9c30e435f5849 (diff)
downloadrest-query-25ccda10b3b7f16f9fcee0b41c4abd035b3d1330.tar.gz
rest-query-25ccda10b3b7f16f9fcee0b41c4abd035b3d1330.tar.bz2
rest-query-25ccda10b3b7f16f9fcee0b41c4abd035b3d1330.zip
Created json format for create intervention
-rw-r--r--src/main/scala/xyz/driver/pdsuicommon/utils/CustomSwaggerJsonFormats.scala2
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/intervention/ApiPartialIntervention.scala6
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/intervention.scala52
-rw-r--r--src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/InterventionFormatSuite.scala12
4 files changed, 65 insertions, 7 deletions
diff --git a/src/main/scala/xyz/driver/pdsuicommon/utils/CustomSwaggerJsonFormats.scala b/src/main/scala/xyz/driver/pdsuicommon/utils/CustomSwaggerJsonFormats.scala
index c1a2c7c..6c87858 100644
--- a/src/main/scala/xyz/driver/pdsuicommon/utils/CustomSwaggerJsonFormats.scala
+++ b/src/main/scala/xyz/driver/pdsuicommon/utils/CustomSwaggerJsonFormats.scala
@@ -42,7 +42,7 @@ object CustomSwaggerJsonFormats {
xyz.driver.pdsuidomain.fakes.entities.trialcuration.nextTrialIssue()),
classOf[RichCriterion] -> richCriterionFormat.write(
xyz.driver.pdsuidomain.fakes.entities.trialcuration.nextRichCriterion()),
- classOf[InterventionWithArms] -> interventionWriter.write(
+ classOf[InterventionWithArms] -> interventionFormat.write(
xyz.driver.pdsuidomain.fakes.entities.trialcuration.nextInterventionWithArms()),
classOf[InterventionType] -> interventionTypeFormat.write(
xyz.driver.pdsuidomain.fakes.entities.trialcuration.nextInterventionType()),
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 {
diff --git a/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/InterventionFormatSuite.scala b/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/InterventionFormatSuite.scala
index 0f01d4a..a52c385 100644
--- a/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/InterventionFormatSuite.scala
+++ b/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/InterventionFormatSuite.scala
@@ -29,12 +29,22 @@ class InterventionFormatSuite extends FlatSpec with Matchers {
intervention = intervention,
arms = arms
)
- val writtenJson = interventionWriter.write(orig)
+ val writtenJson = interventionFormat.write(orig)
writtenJson should be(
"""{"id":1,"name":"intervention name","typeId":10,"dosage":"","isActive":true,"arms":[20,21,22],
"trialId":"NCT000001","originalName":"orig name","originalDosage":"","originalType":"orig type"}""".parseJson)
+ val createInterventionJson =
+ """{"id":1,"name":"intervention name","typeId":10,"dosage":"","isActive":true,"arms":[20,21,22],
+ "trialId":"NCT000001"}""".parseJson
+ val parsedCreateIntervention = interventionFormat.read(createInterventionJson)
+ val expectedCreateIntervention = parsedCreateIntervention.copy(
+ intervention = intervention.copy(id = LongId(0), originalType = None, originalName = "intervention name"),
+ arms = arms.map(_.copy(interventionId = LongId(0)))
+ )
+ parsedCreateIntervention should be(expectedCreateIntervention)
+
val updateInterventionJson = """{"dosage":"descr","arms":[21,22]}""".parseJson
val expectedUpdatedIntervention = orig.copy(
intervention = intervention.copy(dosage = "descr"),