From cd1b635b2ae90d9ac2d8b1779183a1fbd8c5fd5c Mon Sep 17 00:00:00 2001 From: vlad Date: Tue, 13 Jun 2017 16:12:20 -0700 Subject: Adding domain entities --- .../xyz/driver/pdsuidomain/entities/Patient.scala | 63 ++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 src/main/scala/xyz/driver/pdsuidomain/entities/Patient.scala (limited to 'src/main/scala/xyz/driver/pdsuidomain/entities/Patient.scala') diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/Patient.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/Patient.scala new file mode 100644 index 0000000..7767db0 --- /dev/null +++ b/src/main/scala/xyz/driver/pdsuidomain/entities/Patient.scala @@ -0,0 +1,63 @@ +package xyz.driver.pdsuidomain.entities + +import java.time.{LocalDate, LocalDateTime} + +import xyz.driver.pdsuicommon.domain.{LongId, User, UuidId} +import xyz.driver.pdsuicommon.logging._ +import xyz.driver.pdsuicommon.utils.Utils + +object Patient { + + // Product with Serizalizable fixes issue: + // Set(New, Verified) has type Set[Status with Product with Serializable] + sealed trait Status extends Product with Serializable { + def oneOf(xs: Status*): Boolean = xs.contains(this) + + def oneOf(xs: Set[Status]): Boolean = xs.contains(this) + } + + object Status { + case object New extends Status + case object Verified extends Status + case object Reviewed extends Status + case object Curated extends Status + case object Flagged extends Status + case object Done extends Status + + val AllPrevious = Set[Status]( + New, Verified, Reviewed, Curated + ) + + val All = Set[Status]( + New, Verified, Reviewed, Curated, Flagged, Done + ) + + implicit def toPhiString(x: Status): PhiString = Unsafe(Utils.getClassSimpleName(x.getClass)) + } + + implicit def toPhiString(x: Patient): PhiString = { + import x._ + phi"Patient(id=$id, status=$status, previousStatus=$previousStatus, " + + phi"assignee=$assignee, previousAssignee=$previousAssignee)" + } +} + +case class Patient(id: UuidId[Patient], + status: Patient.Status, + name: String, + dob: LocalDate, + assignee: Option[LongId[User]], + previousStatus: Option[Patient.Status], + previousAssignee: Option[LongId[User]], + isUpdateRequired: Boolean, + condition: String, + orderId: PatientOrderId, + lastUpdate: LocalDateTime) { + + import Patient.Status._ + + if (previousStatus.nonEmpty) { + assert(AllPrevious.contains(previousStatus.get), + s"Previous status has invalid value: ${previousStatus.get}") + } +} -- cgit v1.2.3