aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/xyz/driver/pdsuidomain/formats/json/intervention/ApiIntervention.scala
blob: 072ed258d76257cc40ea687da033bd39e7dbc493 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
package xyz.driver.pdsuidomain.formats.json.intervention

import xyz.driver.pdsuicommon.domain.{LongId, StringId}
import xyz.driver.pdsuidomain.entities.{Intervention, InterventionArm, InterventionWithArms}
import play.api.libs.functional.syntax._
import play.api.libs.json.{Format, JsPath}

final case class ApiIntervention(id: Long,
                                 name: String,
                                 typeId: Option[Long],
                                 dosage: String,
                                 isActive: Boolean,
                                 arms: List[Long],
                                 trialId: String,
                                 deliveryMethod: Option[String],
                                 originalName: String,
                                 originalDosage: String,
                                 originalType: Option[String]) {

  def toDomain = {
    val intervention = Intervention(
      id = LongId(this.id),
      trialId = StringId(this.trialId),
      name = this.name,
      originalName = this.originalName,
      typeId = this.typeId.map(id => LongId(id)),
      originalType = this.originalType.map(id => id.toString),
      dosage = this.dosage,
      originalDosage = this.originalDosage,
      isActive = this.isActive,
      deliveryMethod = this.deliveryMethod
    )

    InterventionWithArms(intervention, this.arms.map { armId =>
      InterventionArm(LongId(armId), intervention.id)
    })

  }

}

object ApiIntervention {

  implicit val format: Format[ApiIntervention] = (
    (JsPath \ "id").format[Long] and
      (JsPath \ "name").format[String] and
      (JsPath \ "typeId").formatNullable[Long] and
      (JsPath \ "dosage").format[String] and
      (JsPath \ "isActive").format[Boolean] and
      (JsPath \ "arms").format[List[Long]] and
      (JsPath \ "trialId").format[String] and
      (JsPath \ "deliveryMethod").formatNullable[String] and
      (JsPath \ "originalName").format[String] and
      (JsPath \ "originalDosage").format[String] and
      (JsPath \ "originalType").formatNullable[String]
  )(ApiIntervention.apply, unlift(ApiIntervention.unapply))

  def fromDomain(interventionWithArms: InterventionWithArms): ApiIntervention = {
    import interventionWithArms.intervention
    import interventionWithArms.arms

    ApiIntervention(
      id = intervention.id.id,
      name = intervention.name,
      typeId = intervention.typeId.map(_.id),
      dosage = intervention.dosage,
      isActive = intervention.isActive,
      arms = arms.map(_.armId.id),
      trialId = intervention.trialId.id,
      deliveryMethod = intervention.deliveryMethod,
      originalName = intervention.originalName,
      originalDosage = intervention.originalDosage,
      originalType = intervention.originalType
    )
  }
}