aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKseniya Tomskikh <ktomskih@datamonsters.co>2017-09-27 16:41:04 +0700
committerKseniya Tomskikh <ktomskih@datamonsters.co>2017-09-27 16:41:04 +0700
commit1fa90814e5930ad0bbe61ba5b082747781e1dc92 (patch)
treeae61966402b57425479bafd1d34ce680ca5cfe28
parent3a9ba980e6ce08361f6f3cdaf6ab2a401101b35c (diff)
downloadrest-query-1fa90814e5930ad0bbe61ba5b082747781e1dc92.tar.gz
rest-query-1fa90814e5930ad0bbe61ba5b082747781e1dc92.tar.bz2
rest-query-1fa90814e5930ad0bbe61ba5b082747781e1dc92.zip
PDSUI-2275 Review fixes
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/Intervention.scala120
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/fakes/entities/trialcuration.scala5
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/intervention/ApiInterventionType.scala16
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/intervention.scala17
-rw-r--r--src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/InterventionFormatSuite.scala7
5 files changed, 84 insertions, 81 deletions
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/Intervention.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/Intervention.scala
index 6dc42d0..f5b486b 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/Intervention.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/entities/Intervention.scala
@@ -2,24 +2,83 @@ package xyz.driver.pdsuidomain.entities
import xyz.driver.pdsuicommon.domain.{LongId, StringId}
import xyz.driver.pdsuicommon.logging._
+import xyz.driver.pdsuidomain.entities.InterventionType.DeliveryMethod
import xyz.driver.pdsuidomain.entities.InterventionType.DeliveryMethod._
-final case class InterventionType(id: LongId[InterventionType], name: String)
+sealed trait InterventionType {
+ val id: LongId[InterventionType]
+ val name: String
+ val deliveryMethod: Set[DeliveryMethod]
+}
object InterventionType {
- sealed trait InterventionTypeName
- case object RadiationTherapy extends InterventionTypeName
- case object Chemotherapy extends InterventionTypeName
- case object TargetedTherapy extends InterventionTypeName
- case object Immunotherapy extends InterventionTypeName
- case object Surgery extends InterventionTypeName
- case object HormoneTherapy extends InterventionTypeName
- case object Other extends InterventionTypeName
- case object Radiation extends InterventionTypeName
- case object SurgeryProcedure extends InterventionTypeName
-
- def typeFromString: PartialFunction[String, InterventionTypeName] = {
+ final case object RadiationTherapy extends InterventionType {
+ val id: LongId[InterventionType] = LongId[InterventionType](1)
+ val name: String = "Radiation therapy"
+ val deliveryMethod: Set[DeliveryMethod] = commonMethods
+ }
+
+ final case object Chemotherapy extends InterventionType {
+ val id: LongId[InterventionType] = LongId[InterventionType](2)
+ val name: String = "Chemotherapy"
+ val deliveryMethod: Set[DeliveryMethod] = commonMethods
+ }
+
+ final case object TargetedTherapy extends InterventionType {
+ val id: LongId[InterventionType] = LongId[InterventionType](3)
+ val name: String = "Targeted therapy"
+ val deliveryMethod: Set[DeliveryMethod] = commonMethods
+ }
+
+ final case object Immunotherapy extends InterventionType {
+ val id: LongId[InterventionType] = LongId[InterventionType](4)
+ val name: String = "Immunotherapy"
+ val deliveryMethod: Set[DeliveryMethod] = commonMethods
+ }
+
+ final case object Surgery extends InterventionType {
+ val id: LongId[InterventionType] = LongId[InterventionType](5)
+ val name: String = "Surgery"
+ val deliveryMethod: Set[DeliveryMethod] = commonMethods
+ }
+
+ final case object HormoneTherapy extends InterventionType {
+ val id: LongId[InterventionType] = LongId[InterventionType](6)
+ val name: String = "Hormone therapy"
+ val deliveryMethod: Set[DeliveryMethod] = commonMethods
+ }
+
+ final case object Other extends InterventionType {
+ val id: LongId[InterventionType] = LongId[InterventionType](7)
+ val name: String = "Other"
+ val deliveryMethod: Set[DeliveryMethod] = commonMethods
+ }
+
+ final case object Radiation extends InterventionType {
+ val id: LongId[InterventionType] = LongId[InterventionType](8)
+ val name: String = "Radiation"
+ val deliveryMethod: Set[DeliveryMethod] = Set(
+ ExternalRadiationTherapy,
+ Brachytherapy,
+ SystemicRadiationTherapyIV,
+ SystemicRadiationTherapyOral,
+ ProtonBeamTherapy
+ )
+ }
+
+ final case object SurgeryProcedure extends InterventionType {
+ val id: LongId[InterventionType] = LongId[InterventionType](9)
+ val name: String = "Surgery/Procedure"
+ val deliveryMethod: Set[DeliveryMethod] = Set(
+ RadioFrequencyAblationRFA,
+ Cryoablation,
+ TherapeuticConventionalSurgery,
+ RoboticAssistedLaparoscopicSurgery
+ )
+ }
+
+ def typeFromString: PartialFunction[String, InterventionType] = {
case "Radiation therapy" => RadiationTherapy
case "Chemotherapy" => Chemotherapy
case "Targeted therapy" => TargetedTherapy
@@ -31,18 +90,6 @@ object InterventionType {
case "Surgery/Procedure" => SurgeryProcedure
}
- def typeToString(x: InterventionTypeName): String = x match {
- case RadiationTherapy => "Radiation therapy"
- case Chemotherapy => "Chemotherapy"
- case TargetedTherapy => "Targeted therapy"
- case Immunotherapy => "Immunotherapy"
- case Surgery => "Surgery"
- case HormoneTherapy => "Hormone therapy"
- case Other => "Other"
- case Radiation => "Radiation"
- case SurgeryProcedure => "Surgery/Procedure"
- }
-
sealed trait DeliveryMethod
object DeliveryMethod {
case object IntravenousInfusionIV extends DeliveryMethod
@@ -123,29 +170,6 @@ object InterventionType {
Rectal
)
- val deliveryMethodGroups: Map[LongId[InterventionType], Set[DeliveryMethod]] = Map(
- LongId(1) -> commonMethods,
- LongId(2) -> commonMethods,
- LongId(3) -> commonMethods,
- LongId(4) -> commonMethods,
- LongId(5) -> commonMethods,
- LongId(6) -> commonMethods,
- LongId(7) -> commonMethods,
- LongId(8) -> Set(
- ExternalRadiationTherapy,
- Brachytherapy,
- SystemicRadiationTherapyIV,
- SystemicRadiationTherapyOral,
- ProtonBeamTherapy
- ),
- LongId(9) -> Set(
- RadioFrequencyAblationRFA,
- Cryoablation,
- TherapeuticConventionalSurgery,
- RoboticAssistedLaparoscopicSurgery
- )
- )
-
implicit def toPhiString(x: InterventionType): PhiString = {
import x._
phi"InterventionType(id=$id, name=${Unsafe(name)})"
diff --git a/src/main/scala/xyz/driver/pdsuidomain/fakes/entities/trialcuration.scala b/src/main/scala/xyz/driver/pdsuidomain/fakes/entities/trialcuration.scala
index a2bdf43..19dd95e 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/fakes/entities/trialcuration.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/fakes/entities/trialcuration.scala
@@ -130,9 +130,6 @@ object trialcuration {
name = generators.nextString()
)
- def nextInterventionType(): InterventionType = InterventionType(
- id = nextLongId[InterventionType],
- name = generators.nextString()
- )
+ def nextInterventionType(): InterventionType = InterventionType.typeFromString("Other")
}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/intervention/ApiInterventionType.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/intervention/ApiInterventionType.scala
index c28c5b4..3550437 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/intervention/ApiInterventionType.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/intervention/ApiInterventionType.scala
@@ -2,13 +2,12 @@ package xyz.driver.pdsuidomain.formats.json.intervention
import play.api.libs.functional.syntax._
import play.api.libs.json.{Format, JsPath}
-import xyz.driver.pdsuicommon.domain.LongId
import xyz.driver.pdsuidomain.entities.InterventionType
import xyz.driver.pdsuidomain.entities.InterventionType.DeliveryMethod
final case class ApiInterventionType(id: Long, name: String, deliveryMethods: List[String]) {
- def toDomain = InterventionType(id = LongId[InterventionType](id), name = name)
+ def toDomain = InterventionType.typeFromString(name)
}
object ApiInterventionType {
@@ -19,12 +18,9 @@ object ApiInterventionType {
(JsPath \ "deliveryMethods").format[List[String]]
)(ApiInterventionType.apply, unlift(ApiInterventionType.unapply))
- def fromDomain(interventionType: InterventionType) = {
- val typeMethods = InterventionType.deliveryMethodGroups.getOrElse(interventionType.id, Set.empty[DeliveryMethod])
- ApiInterventionType(
- id = interventionType.id.id,
- name = interventionType.name,
- deliveryMethods = typeMethods.map(DeliveryMethod.methodToString).toList
- )
- }
+ def fromDomain(interventionType: InterventionType) = ApiInterventionType(
+ id = interventionType.id.id,
+ name = interventionType.name,
+ deliveryMethods = interventionType.deliveryMethod.map(DeliveryMethod.methodToString).toList
+ )
}
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 4bd5bad..2bf1f2b 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
@@ -123,33 +123,22 @@ object intervention {
implicit val interventionTypeFormat: JsonFormat[InterventionType] = new RootJsonFormat[InterventionType] {
override def read(json: JsValue) = json match {
case JsObject(fields) =>
- val id = fields
- .get("id")
- .map(_.convertTo[LongId[InterventionType]])
- .getOrElse(deserializationError(s"Intervention type json object does not contain `id` field: $json"))
-
val name = fields
.get("name")
.map(_.convertTo[String])
.getOrElse(deserializationError(s"Intervention type json object does not contain `name` field: $json"))
- InterventionType(id, name)
+ InterventionType.typeFromString(name)
case _ => deserializationError(s"Expected Json Object as Intervention type, but got $json")
}
- override def write(obj: InterventionType) = {
- val typeMethods = InterventionType.deliveryMethodGroups
- .getOrElse(obj.id, Set.empty[DeliveryMethod])
- .map(DeliveryMethod.methodToString)
- .toList
-
+ override def write(obj: InterventionType) =
JsObject(
"id" -> obj.id.toJson,
"name" -> obj.name.toJson,
- "deliveryMethods" -> typeMethods.toJson
+ "deliveryMethods" -> obj.deliveryMethod.map(DeliveryMethod.methodToString).toJson
)
- }
}
}
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 d406162..dad39c8 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
@@ -59,14 +59,11 @@ class InterventionFormatSuite extends FlatSpec with Matchers {
}
"Json format for InterventionType" should "read and write correct JSON" in {
- val interventionType = InterventionType(
- id = LongId(9),
- name = "type name"
- )
+ val interventionType = InterventionType.typeFromString("Surgery/Procedure")
val writtenJson = interventionTypeFormat.write(interventionType)
writtenJson should be(
- """{"id":9,"name":"type name","deliveryMethods":["Radio-Frequency Ablation (RFA)",
+ """{"id":9,"name":"Surgery/Procedure","deliveryMethods":["Radio-Frequency Ablation (RFA)",
"Cryoablation","Therapeutic Conventional Surgery","Robotic Assisted Laparoscopic Surgery"]}""".parseJson)
val parsedInterventionType = interventionTypeFormat.read(writtenJson)