diff options
Diffstat (limited to 'src/main/scala/xyz/driver/pdsuidomain/formats')
13 files changed, 148 insertions, 19 deletions
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/criterion/ApiCriterion.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/criterion/ApiCriterion.scala index 43b5494..239adb1 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/criterion/ApiCriterion.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/criterion/ApiCriterion.scala @@ -4,7 +4,7 @@ import xyz.driver.pdsuicommon.json.Serialization.seqJsonFormat import play.api.libs.functional.syntax._ import play.api.libs.json._ import xyz.driver.pdsuicommon.domain.{LongId, StringId} -import xyz.driver.pdsuidomain.entities.{Arm, Criterion, Trial} +import xyz.driver.pdsuidomain.entities.{EligibilityArm, Criterion, Trial} import xyz.driver.pdsuidomain.formats.json.label.ApiCriterionLabel import xyz.driver.pdsuidomain.services.CriterionService.RichCriterion @@ -26,7 +26,7 @@ final case class ApiCriterion(id: Long, meta.getOrElse(""), inclusion ), - armIds = arms.map(LongId[Arm]), + armIds = arms.map(LongId[EligibilityArm]), labels = labels.map(_.toDomain(LongId[Criterion](id))) ) } diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/criterion/ApiNewCriterion.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/criterion/ApiNewCriterion.scala index d72a9b4..4b85f83 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/criterion/ApiNewCriterion.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/criterion/ApiNewCriterion.scala @@ -25,7 +25,7 @@ final case class ApiNewCriterion(meta: Option[String], text = text, inclusion = inclusion ), - armIds = arms.getOrElse(Seq.empty).map(LongId[Arm]), + armIds = arms.getOrElse(Seq.empty).map(LongId[EligibilityArm]), labels = labels.map(_.toDomain(LongId(Long.MaxValue))) // A developer should specify right criterionId himself ) } diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/criterion/ApiUpdateCriterion.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/criterion/ApiUpdateCriterion.scala index 77989f0..a700309 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/criterion/ApiUpdateCriterion.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/criterion/ApiUpdateCriterion.scala @@ -2,7 +2,7 @@ package xyz.driver.pdsuidomain.formats.json.criterion import xyz.driver.pdsuicommon.domain.LongId import xyz.driver.pdsuicommon.json.Serialization.seqJsonFormat -import xyz.driver.pdsuidomain.entities.{Arm, Criterion} +import xyz.driver.pdsuidomain.entities.{EligibilityArm, Criterion} import org.davidbild.tristate._ import org.davidbild.tristate.contrib.play.ToJsPathOpsFromJsPath import play.api.libs.functional.syntax._ @@ -19,7 +19,7 @@ final case class ApiUpdateCriterion(meta: Tristate[String], def applyTo(orig: RichCriterion): RichCriterion = RichCriterion( criterion = applyTo(orig.criterion), - armIds = arms.cata(_.map(LongId[Arm]), Seq.empty, orig.armIds), + armIds = arms.cata(_.map(LongId[EligibilityArm]), Seq.empty, orig.armIds), labels = labels.cata(_.map(_.toDomain(orig.criterion.id)), Seq.empty, orig.labels) ) diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/eligibilityarm/ApiEligibilityArm.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/eligibilityarm/ApiEligibilityArm.scala new file mode 100644 index 0000000..e7eb022 --- /dev/null +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/eligibilityarm/ApiEligibilityArm.scala @@ -0,0 +1,35 @@ +package xyz.driver.pdsuidomain.formats.json.eligibilityarm + +import xyz.driver.pdsuicommon.domain.{LongId, StringId} +import xyz.driver.pdsuidomain.entities.EligibilityArm +import play.api.libs.functional.syntax._ +import play.api.libs.json._ + +final case class ApiEligibilityArm(id: Long, name: String, originalName: String, trialId: String) { + + def toDomain: EligibilityArm = EligibilityArm( + id = LongId(this.id), + name = this.name, + originalName = this.originalName, + trialId = StringId(this.trialId), + deleted = None // if we have an ApiEligibilityArm object, the EligibilityArm itself has not been deleted + ) + +} + +object ApiEligibilityArm { + + implicit val format: Format[ApiEligibilityArm] = ( + (JsPath \ "id").format[Long] and + (JsPath \ "name").format[String] and + (JsPath \ "originalName").format[String] and + (JsPath \ "trialId").format[String] + )(ApiEligibilityArm.apply, unlift(ApiEligibilityArm.unapply)) + + def fromDomain(arm: EligibilityArm): ApiEligibilityArm = ApiEligibilityArm( + id = arm.id.id, + name = arm.name, + originalName = arm.originalName, + trialId = arm.trialId.id + ) +} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/eligibilityarm/ApiEligibilityCreateArm.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/eligibilityarm/ApiEligibilityCreateArm.scala new file mode 100644 index 0000000..6f55c10 --- /dev/null +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/eligibilityarm/ApiEligibilityCreateArm.scala @@ -0,0 +1,20 @@ +package xyz.driver.pdsuidomain.formats.json.eligibilityarm + +import xyz.driver.pdsuicommon.domain.{LongId, StringId} +import xyz.driver.pdsuidomain.entities.EligibilityArm +import play.api.libs.json.{Format, Json} + +final case class ApiCreateEligibilityArm(name: String, trialId: String) { + + def toDomain = EligibilityArm( + id = LongId(0), + name = name, + trialId = StringId(trialId), + originalName = name + ) +} + +object ApiCreateEligibilityArm { + + implicit val format: Format[ApiCreateEligibilityArm] = Json.format[ApiCreateEligibilityArm] +} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/eligibilityarm/ApiPartialEligibilityArm.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/eligibilityarm/ApiPartialEligibilityArm.scala new file mode 100644 index 0000000..cc3d460 --- /dev/null +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/eligibilityarm/ApiPartialEligibilityArm.scala @@ -0,0 +1,14 @@ +package xyz.driver.pdsuidomain.formats.json.eligibilityarm + +import xyz.driver.pdsuidomain.entities.EligibilityArm +import play.api.libs.json.{Format, Json} + +final case class ApiPartialEligibilityArm(name: String) { + + def applyTo(arm: EligibilityArm): EligibilityArm = arm.copy(name = name) +} + +object ApiPartialEligibilityArm { + + implicit val format: Format[ApiPartialEligibilityArm] = Json.format +} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/slotarm/ApiPartialSlotArm.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/slotarm/ApiPartialSlotArm.scala new file mode 100644 index 0000000..2f8e93f --- /dev/null +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/slotarm/ApiPartialSlotArm.scala @@ -0,0 +1,14 @@ +package xyz.driver.pdsuidomain.formats.json.slotarm + +import xyz.driver.pdsuidomain.entities.SlotArm +import play.api.libs.json.{Format, Json} + +final case class ApiPartialSlotArm(name: String) { + + def applyTo(arm: SlotArm): SlotArm = arm.copy(name = name) +} + +object ApiPartialSlotArm { + + implicit val format: Format[ApiPartialSlotArm] = Json.format +} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/slotarm/ApiSlotArm.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/slotarm/ApiSlotArm.scala new file mode 100644 index 0000000..375c1a2 --- /dev/null +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/slotarm/ApiSlotArm.scala @@ -0,0 +1,35 @@ +package xyz.driver.pdsuidomain.formats.json.slotarm + +import xyz.driver.pdsuicommon.domain.{LongId, StringId} +import xyz.driver.pdsuidomain.entities.SlotArm +import play.api.libs.functional.syntax._ +import play.api.libs.json._ + +final case class ApiSlotArm(id: Long, name: String, originalName: String, trialId: String) { + + def toDomain: SlotArm = SlotArm( + id = LongId(this.id), + name = this.name, + originalName = this.originalName, + trialId = StringId(this.trialId), + deleted = None // if we have an ApiSlotArm object, the SlotArm itself has not been deleted + ) + +} + +object ApiSlotArm { + + implicit val format: Format[ApiSlotArm] = ( + (JsPath \ "id").format[Long] and + (JsPath \ "name").format[String] and + (JsPath \ "originalName").format[String] and + (JsPath \ "trialId").format[String] + )(ApiSlotArm.apply, unlift(ApiSlotArm.unapply)) + + def fromDomain(arm: SlotArm): ApiSlotArm = ApiSlotArm( + id = arm.id.id, + name = arm.name, + originalName = arm.originalName, + trialId = arm.trialId.id + ) +} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/slotarm/ApiSlotCreateArm.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/slotarm/ApiSlotCreateArm.scala new file mode 100644 index 0000000..3e52c13 --- /dev/null +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/slotarm/ApiSlotCreateArm.scala @@ -0,0 +1,20 @@ +package xyz.driver.pdsuidomain.formats.json.slotarm + +import xyz.driver.pdsuicommon.domain.{LongId, StringId} +import xyz.driver.pdsuidomain.entities.SlotArm +import play.api.libs.json.{Format, Json} + +final case class ApiCreateSlotArm(name: String, trialId: String) { + + def toDomain = SlotArm( + id = LongId(0), + name = name, + trialId = StringId(trialId), + originalName = name + ) +} + +object ApiCreateSlotArm { + + implicit val format: Format[ApiCreateSlotArm] = Json.format[ApiCreateSlotArm] +} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/criterion.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/criterion.scala index 8da719c..7526d9c 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/criterion.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/criterion.scala @@ -80,7 +80,7 @@ object criterion { val arms = fields .get("arms") - .map(_.convertTo[Option[List[LongId[Arm]]]].getOrElse(List.empty[LongId[Arm]])) + .map(_.convertTo[Option[List[LongId[EligibilityArm]]]].getOrElse(List.empty[LongId[EligibilityArm]])) .getOrElse(orig.armIds) val labels = fields @@ -143,8 +143,8 @@ object criterion { val arms = fields .get("arms") - .map(_.convertTo[List[LongId[Arm]]]) - .getOrElse(List.empty[LongId[Arm]]) + .map(_.convertTo[List[LongId[EligibilityArm]]]) + .getOrElse(List.empty[LongId[EligibilityArm]]) val labels = fields .get("labels") 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 62cb9fa..2ced434 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 @@ -56,7 +56,7 @@ object intervention { val arms = fields .get("arms") - .map(_.convertTo[List[LongId[Arm]]].map(x => InterventionArm(armId = x, interventionId = LongId(0)))) + .map(_.convertTo[List[LongId[SlotArm]]].map(x => InterventionArm(armId = x, interventionId = LongId(0)))) .getOrElse(List.empty[InterventionArm]) InterventionWithArms( @@ -104,7 +104,7 @@ object intervention { val origIntervention = orig.intervention val arms = fields .get("arms") - .map(_.convertTo[List[LongId[Arm]]].map(x => InterventionArm(x, orig.intervention.id))) + .map(_.convertTo[List[LongId[SlotArm]]].map(x => InterventionArm(x, orig.intervention.id))) orig.copy( intervention = origIntervention.copy( diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/trial.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/trial.scala index c1751bf..a778000 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/trial.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/trial.scala @@ -41,7 +41,6 @@ object trial { "previousStatus" -> obj.previousStatus.toJson, "previousAssignee" -> obj.previousAssignee.toJson, "lastActiveUser" -> obj.lastActiveUserId.toJson, - "condition" -> obj.condition.toJson, "phase" -> obj.phase.toJson, "hypothesisId" -> obj.hypothesisId.toJson, "studyDesignId" -> obj.studyDesignId.toJson, diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/trial/ApiTrial.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/trial/ApiTrial.scala index 1b4ac64..fbf506b 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/trial/ApiTrial.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/trial/ApiTrial.scala @@ -16,7 +16,6 @@ final case class ApiTrial(id: String, previousStatus: Option[String], previousAssignee: Option[String], lastActiveUser: Option[String], - condition: String, phase: String, hypothesisId: Option[UUID], studyDesignId: Option[Long], @@ -37,11 +36,6 @@ final case class ApiTrial(id: String, previousAssignee = this.previousAssignee.map(id => StringId(id)), lastActiveUserId = this.lastActiveUser.map(id => StringId(id)), lastUpdate = this.lastUpdate.toLocalDateTime, - condition = Trial.Condition - .fromString(this.condition) - .getOrElse( - throw new NoSuchElementException(s"unknown condition ${this.condition}") - ), phase = this.phase, hypothesisId = this.hypothesisId.map(id => UuidId(id)), studyDesignId = this.studyDesignId.map(id => LongId(id)), @@ -67,7 +61,6 @@ object ApiTrial { (JsPath \ "previousStatus").formatNullable[String] and (JsPath \ "previousAssignee").formatNullable[String] and (JsPath \ "lastActiveUser").formatNullable[String] and - (JsPath \ "condition").format[String] and (JsPath \ "phase").format[String] and (JsPath \ "hypothesisId").formatNullable[UUID] and (JsPath \ "studyDesignId").formatNullable[Long] and @@ -89,7 +82,6 @@ object ApiTrial { previousAssignee = trial.previousAssignee.map(_.id), lastActiveUser = trial.lastActiveUserId.map(_.id), lastUpdate = ZonedDateTime.of(trial.lastUpdate, ZoneId.of("Z")), - condition = trial.condition.toString, phase = trial.phase, hypothesisId = trial.hypothesisId.map(_.id), studyDesignId = trial.studyDesignId.map(_.id), |