From 49cda2524a2537cb9330af488ca9c30e435f5849 Mon Sep 17 00:00:00 2001 From: kseniya Date: Fri, 22 Sep 2017 18:09:32 +0700 Subject: Added create and delete endpoint to intervention service --- .../json/intervention/ApiPartialIntervention.scala | 50 +++++++++++++++++++--- 1 file changed, 45 insertions(+), 5 deletions(-) (limited to 'src/main/scala/xyz/driver/pdsuidomain/formats') 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 aa55506..09e0b23 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 @@ -1,11 +1,19 @@ package xyz.driver.pdsuidomain.formats.json.intervention -import xyz.driver.pdsuicommon.domain.LongId -import xyz.driver.pdsuidomain.entities.{InterventionArm, InterventionWithArms} +import play.api.data.validation.Invalid +import xyz.driver.pdsuicommon.domain.{LongId, StringId} +import xyz.driver.pdsuidomain.entities.{Intervention, InterventionArm, InterventionWithArms, Trial} import play.api.libs.functional.syntax._ import play.api.libs.json._ +import xyz.driver.pdsuicommon.json.JsonValidationException +import xyz.driver.pdsuicommon.validation.{AdditionalConstraints, JsonValidationErrors} -final case class ApiPartialIntervention(typeId: Option[Long], +import scala.collection.breakOut +import scala.util.Try + +final case class ApiPartialIntervention(name: Option[String], + trialId: Option[String], + typeId: Option[Long], dosage: Option[String], isActive: Option[Boolean], arms: Option[List[Long]]) { @@ -22,19 +30,51 @@ final case class ApiPartialIntervention(typeId: Option[Long], arms = draftArmList.getOrElse(orig.arms) ) } + + //TODO: need to discuss + def toDomain: Try[InterventionWithArms] = Try { + val validation = Map(JsPath \ "trialId" -> AdditionalConstraints.optionNonEmptyConstraint(trialId)) + + val validationErrors: JsonValidationErrors = validation.collect({ + case (fieldName, e: Invalid) => (fieldName, e.errors) + })(breakOut) + + if (validationErrors.isEmpty) { + InterventionWithArms( + intervention = Intervention( + id = LongId(0), + trialId = trialId.map(StringId[Trial]).get, + name = name.getOrElse(""), + originalName = name.getOrElse(""), + typeId = typeId.map(LongId(_)), + originalType = Option(""), + dosage = dosage.getOrElse(""), + originalDosage = dosage.getOrElse(""), + isActive = isActive.getOrElse(false) + ), + arms = arms.map(_.map(x => InterventionArm(LongId(x), LongId(0)))).getOrElse(List.empty) + ) + } else { + throw new JsonValidationException(validationErrors) + } + } } object ApiPartialIntervention { private val reads: Reads[ApiPartialIntervention] = ( - (JsPath \ "typeId").readNullable[Long] and + (JsPath \ "name").readNullable[String] and + (JsPath \ "trialId").readNullable[String] and + (JsPath \ "typeId").readNullable[Long] and (JsPath \ "dosage").readNullable[String] and (JsPath \ "isActive").readNullable[Boolean] and (JsPath \ "arms").readNullable[List[Long]] )(ApiPartialIntervention.apply _) private val writes: Writes[ApiPartialIntervention] = ( - (JsPath \ "typeId").writeNullable[Long] and + (JsPath \ "name").writeNullable[String] and + (JsPath \ "trialId").writeNullable[String] and + (JsPath \ "typeId").writeNullable[Long] and (JsPath \ "dosage").writeNullable[String] and (JsPath \ "isActive").writeNullable[Boolean] and (JsPath \ "arms").writeNullable[List[Long]] -- cgit v1.2.3