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
|
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],
description: String,
isActive: Boolean,
arms: List[Long],
trialId: String,
originalName: String,
originalDescription: 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),
description = this.description,
originalDescription = this.originalDescription,
isActive = this.isActive
)
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 \ "description").format[String] and
(JsPath \ "isActive").format[Boolean] and
(JsPath \ "arms").format[List[Long]] and
(JsPath \ "trialId").format[String] and
(JsPath \ "originalName").format[String] and
(JsPath \ "originalDescription").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),
description = intervention.description,
isActive = intervention.isActive,
arms = arms.map(_.armId.id),
trialId = intervention.trialId.id,
originalName = intervention.originalName,
originalDescription = intervention.originalDescription,
originalType = intervention.originalType
)
}
}
|