aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/xyz/driver/pdsuidomain/formats/json/record
diff options
context:
space:
mode:
authorJakob Odersky <jakob@driver.xyz>2017-07-24 16:24:12 -0700
committerJakob Odersky <jakob@driver.xyz>2017-07-25 15:43:56 -0700
commite22a94604d6090d88801ec52c39f4eab500e80e1 (patch)
treee20332a9693a4c2d00d32cf67438ef4ba74f9356 /src/main/scala/xyz/driver/pdsuidomain/formats/json/record
parent23192326cfc82e726b03f23396f2587ca4f606f5 (diff)
downloadrest-query-e22a94604d6090d88801ec52c39f4eab500e80e1.tar.gz
rest-query-e22a94604d6090d88801ec52c39f4eab500e80e1.tar.bz2
rest-query-e22a94604d6090d88801ec52c39f4eab500e80e1.zip
Implement ReP rest services
Diffstat (limited to 'src/main/scala/xyz/driver/pdsuidomain/formats/json/record')
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/record/ApiCreateRecord.scala3
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/record/ApiRecord.scala37
2 files changed, 37 insertions, 3 deletions
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/record/ApiCreateRecord.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/record/ApiCreateRecord.scala
index e96bc81..2e5943e 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/record/ApiCreateRecord.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/record/ApiCreateRecord.scala
@@ -7,7 +7,7 @@ import xyz.driver.pdsuicommon.domain._
import xyz.driver.pdsuidomain.entities._
import play.api.libs.json._
-final case class ApiCreateRecord(disease: String, patientId: String, requestId: UUID, filename: String) {
+final case class ApiCreateRecord(disease: String, patientId: String, requestId: UUID) {
def toDomain = MedicalRecord(
id = LongId(0),
@@ -21,7 +21,6 @@ final case class ApiCreateRecord(disease: String, patientId: String, requestId:
disease = disease,
caseId = None,
physician = None,
- sourceName = filename,
meta = None,
predictedMeta = None,
predictedDocuments = None,
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/record/ApiRecord.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/record/ApiRecord.scala
index 0e0b4d9..b255892 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/record/ApiRecord.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/record/ApiRecord.scala
@@ -1,12 +1,17 @@
package xyz.driver.pdsuidomain.formats.json.record
import java.time.{ZoneId, ZonedDateTime}
+import java.util.UUID
+import xyz.driver.pdsuidomain.entities.CaseId
import xyz.driver.pdsuidomain.entities.MedicalRecord
+import xyz.driver.pdsuidomain.entities.MedicalRecord.Status
+import xyz.driver.pdsuidomain.entities.RecordRequestId
import play.api.data.validation.ValidationError
import play.api.libs.functional.syntax._
import play.api.libs.json._
import xyz.driver.pdsuicommon.json.JsonSerializer
+import xyz.driver.pdsuicommon.domain.{LongId, StringId, TextJson, UuidId}
final case class ApiRecord(id: Long,
patientId: String,
@@ -19,7 +24,35 @@ final case class ApiRecord(id: Long,
assignee: Option[String],
previousAssignee: Option[String],
lastActiveUser: Option[String],
- meta: String)
+ requestId: UUID,
+ meta: String) {
+
+ private def extractStatus(status: String): Status =
+ Status
+ .fromString(status)
+ .getOrElse(
+ throw new NoSuchElementException(s"Status $status not found")
+ )
+
+ def toDomain = MedicalRecord(
+ id = LongId(this.id),
+ status = extractStatus(this.status),
+ previousStatus = this.previousStatus.map(extractStatus),
+ assignee = this.assignee.map(StringId(_)),
+ previousAssignee = this.previousAssignee.map(StringId(_)),
+ lastActiveUserId = this.lastActiveUser.map(StringId(_)),
+ patientId = UuidId(patientId),
+ requestId = RecordRequestId(this.requestId),
+ disease = this.disease,
+ caseId = caseId.map(CaseId(_)),
+ physician = this.physician,
+ meta = Some(TextJson(JsonSerializer.deserialize[List[MedicalRecord.Meta]](this.meta))),
+ predictedMeta = None,
+ predictedDocuments = None,
+ lastUpdate = this.lastUpdate.toLocalDateTime()
+ )
+
+}
object ApiRecord {
@@ -43,6 +76,7 @@ object ApiRecord {
(JsPath \ "assignee").formatNullable[String] and
(JsPath \ "previousAssignee").formatNullable[String] and
(JsPath \ "lastActiveUser").formatNullable[String] and
+ (JsPath \ "requestId").format[UUID] and
(JsPath \ "meta").format(Format(Reads { x =>
JsSuccess(Json.stringify(x))
}, Writes[String](Json.parse)))
@@ -60,6 +94,7 @@ object ApiRecord {
assignee = record.assignee.map(_.id),
previousAssignee = record.previousAssignee.map(_.id),
lastActiveUser = record.lastActiveUserId.map(_.id),
+ requestId = record.requestId.id,
meta = record.meta.map(x => JsonSerializer.serialize(x.content)).getOrElse("[]")
)
}