aboutsummaryrefslogblamecommitdiff
path: root/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patient.scala
blob: 3da76c1f3e96866b3498e94f77e1bcf1c211a41c (plain) (tree)
1
2
3
4
5
6
7




                                                        

                                        






















                                                                                                       
                                                                                     










                                                              
                                                        




                                                    
package xyz.driver.pdsuidomain.formats.json.sprayformats

import spray.json._
import xyz.driver.core.json.EnumJsonFormat
import xyz.driver.pdsuidomain.entities._
import xyz.driver.formats.json.common._
import xyz.driver.formats.json.patient._

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.cancerType.toJson,
        "orderId"          -> patient.orderId.toJson
      )
  }

}