From 838c6a345c749a58472ee4324f60a3759a83aedd Mon Sep 17 00:00:00 2001 From: Jakob Odersky Date: Thu, 27 Jul 2017 13:14:04 -0700 Subject: Implement RestPatientService --- .../formats/json/patient/ApiPatient.scala | 34 +++++++++++++++++++--- 1 file changed, 30 insertions(+), 4 deletions(-) (limited to 'src/main/scala/xyz/driver/pdsuidomain/formats/json') diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/ApiPatient.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/ApiPatient.scala index 05a57e4..db430ae 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/ApiPatient.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/ApiPatient.scala @@ -1,8 +1,10 @@ package xyz.driver.pdsuidomain.formats.json.patient import java.time.{LocalDate, ZoneId, ZonedDateTime} +import java.util.UUID -import xyz.driver.pdsuidomain.entities.Patient +import xyz.driver.pdsuicommon.domain.{StringId, UuidId} +import xyz.driver.pdsuidomain.entities.{Patient, PatientOrderId} import play.api.libs.functional.syntax._ import play.api.libs.json.{Format, JsPath} @@ -15,7 +17,29 @@ final case class ApiPatient(id: String, previousAssignee: Option[String], lastActiveUser: Option[String], lastUpdate: ZonedDateTime, - condition: String) + condition: String, + orderId: UUID) { + + private def extractStatus(status: String): Patient.Status = + PatientStatus.statusFromString + .applyOrElse(status, (s: String) => throw new NoSuchElementException(s"Unknown status $s")) + + def toDomain = Patient( + id = UuidId(this.id), + status = extractStatus(this.status), + name = this.name, + dob = this.dob, + assignee = this.assignee.map(StringId(_)), + previousStatus = this.previousStatus.map(extractStatus), + previousAssignee = this.previousAssignee.map(StringId(_)), + lastActiveUserId = this.lastActiveUser.map(StringId(_)), + isUpdateRequired = false, + condition = this.condition, + orderId = PatientOrderId(this.orderId), + lastUpdate = this.lastUpdate.toLocalDateTime + ) + +} object ApiPatient { @@ -29,7 +53,8 @@ object ApiPatient { (JsPath \ "previousAssignee").formatNullable[String] and (JsPath \ "lastActiveUser").formatNullable[String] and (JsPath \ "lastUpdate").format[ZonedDateTime] and - (JsPath \ "condition").format[String] + (JsPath \ "condition").format[String] and + (JsPath \ "orderId").format[UUID] )(ApiPatient.apply, unlift(ApiPatient.unapply)) def fromDomain(patient: Patient) = ApiPatient( @@ -42,6 +67,7 @@ object ApiPatient { previousAssignee = patient.previousAssignee.map(_.id), lastActiveUser = patient.lastActiveUserId.map(_.id), lastUpdate = ZonedDateTime.of(patient.lastUpdate, ZoneId.of("Z")), - condition = patient.condition + condition = patient.condition, + orderId = patient.orderId.id ) } -- cgit v1.2.3