aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/export.scala
blob: 20b6ed0688100ca4a4c3c5555ded7655e2ef2e98 (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
77
78
package xyz.driver.pdsuidomain.formats.json.sprayformats

import spray.json._
import xyz.driver.pdsuidomain.entities.export.patient._
import xyz.driver.pdsuidomain.entities.export.trial.{ExportTrialArm, ExportTrialLabelCriterion, ExportTrialWithLabels}

object export {
  import DefaultJsonProtocol._
  import common._
  import record._

  implicit val patientLabelEvidenceDocumentFormat: RootJsonFormat[ExportPatientLabelEvidenceDocument] = jsonFormat5(
    ExportPatientLabelEvidenceDocument.apply)

  implicit val patientLabelEvidenceWriter: JsonWriter[ExportPatientLabelEvidence] =
    new JsonWriter[ExportPatientLabelEvidence] {
      override def write(obj: ExportPatientLabelEvidence): JsValue =
        JsObject(
          "evidenceId"   -> obj.id.toJson,
          "labelValue"   -> obj.value.toJson,
          "evidenceText" -> obj.evidenceText.toJson,
          "document"     -> obj.document.toJson
        )
    }

  implicit val patientLabelWriter: JsonWriter[ExportPatientLabel] = new JsonWriter[ExportPatientLabel] {
    override def write(obj: ExportPatientLabel): JsValue =
      JsObject(
        "labelId"  -> obj.id.toJson,
        "evidence" -> obj.evidences.map(_.toJson).toJson
      )
  }

  implicit val patientWithLabelsWriter: JsonWriter[ExportPatientWithLabels] = new JsonWriter[ExportPatientWithLabels] {
    override def write(obj: ExportPatientWithLabels): JsValue =
      JsObject(
        "patientId"    -> obj.patientId.toJson,
        "labelVersion" -> obj.labelVersion.toJson,
        "labels"       -> obj.labels.map(_.toJson).toJson
      )
  }

  implicit val trialArmFormat: RootJsonFormat[ExportTrialArm] = jsonFormat2(ExportTrialArm.apply)

  implicit val trialLabelCriterionWriter: JsonWriter[ExportTrialLabelCriterion] =
    new JsonWriter[ExportTrialLabelCriterion] {
      override def write(obj: ExportTrialLabelCriterion): JsValue =
        JsObject(
          "value" -> obj.value
            .map {
              case true  => "Yes"
              case false => "No"
            }
            .getOrElse("Unknown")
            .toJson,
          "labelId"       -> obj.labelId.toJson,
          "criterionId"   -> obj.criterionId.toJson,
          "criterionText" -> obj.criteria.toJson,
          "armIds"        -> obj.armIds.toJson,
          "isCompound"    -> obj.isCompound.toJson,
          "isDefining"    -> obj.isDefining.toJson
        )
    }

  implicit val trialWithLabelsWriter: JsonWriter[ExportTrialWithLabels] = new JsonWriter[ExportTrialWithLabels] {
    override def write(obj: ExportTrialWithLabels) =
      JsObject(
        "nctId"        -> obj.nctId.toJson,
        "trialId"      -> obj.trialId.toJson,
        "disease"      -> obj.condition.toJson,
        "lastReviewed" -> obj.lastReviewed.toJson,
        "labelVersion" -> obj.labelVersion.toJson,
        "arms"         -> obj.arms.toJson,
        "criteria"     -> obj.criteria.map(_.toJson).toJson
      )
  }

}