aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patient.scala
blob: 95c06745ea52782fc86ce62a20a885cce8eef2c7 (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
package xyz.driver.pdsuidomain.formats.json.sprayformats

import spray.json._
import xyz.driver.core.json.EnumJsonFormat
import xyz.driver.pdsuidomain.entities._

object patient {
  import DefaultJsonProtocol._
  import common._
  import Patient._

  implicit val patientStatusFormat = new EnumJsonFormat[Status](
    "New"      -> Status.New,
    "Verified" -> Status.Verified,
    "Reviewed" -> Status.Reviewed,
    "Curated"  -> Status.Curated,
    "Done"     -> Status.Done,
    "Flagged"  -> Status.Flagged
  )

  implicit val patientOrderIdFormat = new RootJsonFormat[PatientOrderId] {
    override def write(orderId: PatientOrderId): JsString = JsString(orderId.toString)
    override def read(json: JsValue): PatientOrderId = json match {
      case JsString(value) => PatientOrderId(value)
      case _               => deserializationError(s"Expected string as PatientOrderId, but got $json")
    }
  }

  implicit val patientWriter: RootJsonWriter[Patient] = new RootJsonWriter[Patient] {
    override def write(patient: Patient): JsValue =
      JsObject(
        "id"               -> patient.id.toJson,
        "status"           -> patient.status.toJson,
        "name"             -> patient.name.toJson,
        "dob"              -> patient.dob.toJson,
        "assignee"         -> patient.assignee.toJson,
        "previousStatus"   -> patient.previousStatus.toJson,
        "previousAssignee" -> patient.previousAssignee.toJson,
        "lastActiveUser"   -> patient.lastActiveUserId.toJson,
        "lastUpdate"       -> patient.lastUpdate.toJson,
        "condition"        -> patient.condition.toJson,
        "orderId"          -> patient.orderId.toJson
      )
  }

}