From 56187bec9276f51886a01a2752c663f2227d9fc3 Mon Sep 17 00:00:00 2001 From: vlad Date: Fri, 30 Jun 2017 23:06:43 -0700 Subject: Export entities JSON formats --- .../json/export/ApiExportPatientLabel.scala | 22 ++++++++++++ .../export/ApiExportPatientLabelEvidence.scala | 28 ++++++++++++++++ .../ApiExportPatientLabelEvidenceDocument.scala | 34 +++++++++++++++++++ .../json/export/ApiExportPatientWithLabels.scala | 22 ++++++++++++ .../formats/json/export/ApiExportTrial.scala | 26 +++++++++++++++ .../formats/json/export/ApiExportTrialArm.scala | 20 +++++++++++ .../json/export/ApiExportTrialLabelCriterion.scala | 39 ++++++++++++++++++++++ .../formats/json/export/ApiExportTrialList.scala | 15 +++++++++ .../json/export/ApiExportTrialWithLabels.scala | 38 +++++++++++++++++++++ .../json/linkedpatient/ApiLinkedPatient.scala | 8 ++--- .../formats/json/queue/ApiQueueUploadItem.scala | 38 +++++++++++++++++++++ .../formats/json/userhistory/ApiUserHistory.scala | 2 +- 12 files changed, 285 insertions(+), 7 deletions(-) create mode 100644 src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportPatientLabel.scala create mode 100644 src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportPatientLabelEvidence.scala create mode 100644 src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportPatientLabelEvidenceDocument.scala create mode 100644 src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportPatientWithLabels.scala create mode 100644 src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportTrial.scala create mode 100644 src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportTrialArm.scala create mode 100644 src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportTrialLabelCriterion.scala create mode 100644 src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportTrialList.scala create mode 100644 src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportTrialWithLabels.scala create mode 100644 src/main/scala/xyz/driver/pdsuidomain/formats/json/queue/ApiQueueUploadItem.scala (limited to 'src/main/scala/xyz/driver/pdsuidomain/formats/json') diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportPatientLabel.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportPatientLabel.scala new file mode 100644 index 0000000..78a73a6 --- /dev/null +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportPatientLabel.scala @@ -0,0 +1,22 @@ +package xyz.driver.pdsuidomain.formats.json.export + +import play.api.libs.functional.syntax._ +import play.api.libs.json.{Format, JsPath} +import xyz.driver.pdsuidomain.entities.export.patient.ExportPatientLabel + +final case class ApiExportPatientLabel(id: String, labelName: String, evidences: List[ApiExportPatientLabelEvidence]) + +object ApiExportPatientLabel { + + implicit val format: Format[ApiExportPatientLabel] = ( + (JsPath \ "labelId").format[String] and + (JsPath \ "labelName").format[String] and + (JsPath \ "evidence").format[List[ApiExportPatientLabelEvidence]] + ) (ApiExportPatientLabel.apply, unlift(ApiExportPatientLabel.unapply)) + + def fromDomain(label: ExportPatientLabel) = ApiExportPatientLabel( + id = label.id.toString, + labelName = label.name, + evidences = label.evidences.map(ApiExportPatientLabelEvidence.fromDomain) + ) +} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportPatientLabelEvidence.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportPatientLabelEvidence.scala new file mode 100644 index 0000000..b38c2a0 --- /dev/null +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportPatientLabelEvidence.scala @@ -0,0 +1,28 @@ +package xyz.driver.pdsuidomain.formats.json.export + +import play.api.libs.functional.syntax._ +import play.api.libs.json._ +import xyz.driver.pdsuicommon.domain.FuzzyValue +import xyz.driver.pdsuidomain.entities.export.patient.ExportPatientLabelEvidence + +final case class ApiExportPatientLabelEvidence(evidenceId: String, + labelValue: String, + evidenceText: String, + document: ApiExportPatientLabelEvidenceDocument) + +object ApiExportPatientLabelEvidence { + + implicit val format: Format[ApiExportPatientLabelEvidence] = ( + (JsPath \ "evidenceId").format[String] and + (JsPath \ "labelValue").format[String](Writes[String](x => JsString(x.toUpperCase))) and + (JsPath \ "evidenceText").format[String] and + (JsPath \ "document").format[ApiExportPatientLabelEvidenceDocument] + ) (ApiExportPatientLabelEvidence.apply, unlift(ApiExportPatientLabelEvidence.unapply)) + + def fromDomain(evidence: ExportPatientLabelEvidence) = ApiExportPatientLabelEvidence( + evidenceId = evidence.id.toString, + labelValue = FuzzyValue.valueToString(evidence.value), + evidenceText = evidence.evidenceText, + document = ApiExportPatientLabelEvidenceDocument.fromDomain(evidence.document) + ) +} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportPatientLabelEvidenceDocument.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportPatientLabelEvidenceDocument.scala new file mode 100644 index 0000000..d094014 --- /dev/null +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportPatientLabelEvidenceDocument.scala @@ -0,0 +1,34 @@ +package xyz.driver.pdsuidomain.formats.json.export + +import java.time.LocalDate + +import play.api.libs.functional.syntax._ +import play.api.libs.json.{Format, JsPath} +import xyz.driver.pdsuidomain.entities.export.patient.ExportPatientLabelEvidenceDocument + +final case class ApiExportPatientLabelEvidenceDocument(documentId: String, + requestId: String, + documentType: String, + providerType: String, + date: LocalDate) + + +object ApiExportPatientLabelEvidenceDocument { + + implicit val format: Format[ApiExportPatientLabelEvidenceDocument] = ( + (JsPath \ "documentId").format[String] and + (JsPath \ "requestId").format[String] and + (JsPath \ "documentType").format[String] and + (JsPath \ "providerType").format[String] and + (JsPath \ "date").format[LocalDate] + ) (ApiExportPatientLabelEvidenceDocument.apply, unlift(ApiExportPatientLabelEvidenceDocument.unapply)) + + def fromDomain(document: ExportPatientLabelEvidenceDocument) = + ApiExportPatientLabelEvidenceDocument( + documentId = document.documentId.toString, + requestId = document.requestId.toString, + documentType = document.documentType, + providerType = document.providerType, + date = document.date + ) +} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportPatientWithLabels.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportPatientWithLabels.scala new file mode 100644 index 0000000..d5b9eb3 --- /dev/null +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportPatientWithLabels.scala @@ -0,0 +1,22 @@ +package xyz.driver.pdsuidomain.formats.json.export + +import play.api.libs.functional.syntax._ +import play.api.libs.json.{Format, JsPath} +import xyz.driver.pdsuidomain.entities.export.patient.ExportPatientWithLabels + +final case class ApiExportPatientWithLabels(patientId: String, labelVersion: Long, labels: List[ApiExportPatientLabel]) + +object ApiExportPatientWithLabels { + + implicit val format: Format[ApiExportPatientWithLabels] = ( + (JsPath \ "patientId").format[String] and + (JsPath \ "labelVersion").format[Long] and + (JsPath \ "labels").format[List[ApiExportPatientLabel]] + ) (ApiExportPatientWithLabels.apply, unlift(ApiExportPatientWithLabels.unapply)) + + def fromDomain(patient: ExportPatientWithLabels) = ApiExportPatientWithLabels( + patientId = patient.patientId.toString, + labelVersion = patient.labelVersion, + labels = patient.labels.map(ApiExportPatientLabel.fromDomain) + ) +} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportTrial.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportTrial.scala new file mode 100644 index 0000000..b12cb93 --- /dev/null +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportTrial.scala @@ -0,0 +1,26 @@ +package xyz.driver.pdsuidomain.formats.json.export + +import java.time.ZoneId + +import play.api.libs.functional.syntax._ +import play.api.libs.json.{Format, JsPath} +import xyz.driver.pdsuidomain.entities.export.trial.ExportTrial + +final case class ApiExportTrial(nctId: String, trialId: String, disease: String, lastReviewed: Long) + +object ApiExportTrial { + + implicit val format: Format[ApiExportTrial] = ( + (JsPath \ "nctId").format[String] and + (JsPath \ "trialId").format[String] and + (JsPath \ "disease").format[String] and + (JsPath \ "lastReviewed").format[Long] + ) (ApiExportTrial.apply, unlift(ApiExportTrial.unapply)) + + def fromDomain(trial: ExportTrial): ApiExportTrial = ApiExportTrial( + nctId = trial.nctId.id, + trialId = trial.trialId.toString, + disease = trial.condition.toString.toUpperCase, + lastReviewed = trial.lastReviewed.atZone(ZoneId.of("Z")).toEpochSecond + ) +} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportTrialArm.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportTrialArm.scala new file mode 100644 index 0000000..0b77832 --- /dev/null +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportTrialArm.scala @@ -0,0 +1,20 @@ +package xyz.driver.pdsuidomain.formats.json.export + +import play.api.libs.functional.syntax._ +import play.api.libs.json._ +import xyz.driver.pdsuidomain.entities.export.trial.ExportTrialArm + +final case class ApiExportTrialArm(armId: String, armName: String) + +object ApiExportTrialArm { + + implicit val format: Format[ApiExportTrialArm] = ( + (JsPath \ "armId").format[String] and + (JsPath \ "armName").format[String] + ) (ApiExportTrialArm.apply, unlift(ApiExportTrialArm.unapply)) + + def fromDomain(arm: ExportTrialArm) = ApiExportTrialArm( + armId = arm.armId.toString, + armName = arm.armName + ) +} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportTrialLabelCriterion.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportTrialLabelCriterion.scala new file mode 100644 index 0000000..09935c0 --- /dev/null +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportTrialLabelCriterion.scala @@ -0,0 +1,39 @@ +package xyz.driver.pdsuidomain.formats.json.export + +import xyz.driver.pdsuicommon.domain.FuzzyValue +import play.api.libs.functional.syntax._ +import play.api.libs.json._ +import xyz.driver.pdsuidomain.entities.export.trial.ExportTrialLabelCriterion + +final case class ApiExportTrialLabelCriterion(value: String, + labelId: String, + criterionId: String, + criterionText: String, + armIds: List[String], + isCompound: Boolean, + isDefining: Boolean) + +object ApiExportTrialLabelCriterion { + + implicit val format: Format[ApiExportTrialLabelCriterion] = ( + (JsPath \ "value").format[String](Writes[String](x => JsString(x.toUpperCase))) and + (JsPath \ "labelId").format[String] and + (JsPath \ "criterionId").format[String] and + (JsPath \ "criterionText").format[String] and + (JsPath \ "armIds").format[List[String]] and + (JsPath \ "isCompound").format[Boolean] and + (JsPath \ "isDefining").format[Boolean] + ) (ApiExportTrialLabelCriterion.apply, unlift(ApiExportTrialLabelCriterion.unapply)) + + def fromDomain(x: ExportTrialLabelCriterion) = ApiExportTrialLabelCriterion( + value = x.value.map { x => + FuzzyValue.valueToString(FuzzyValue.fromBoolean(x)) + }.getOrElse("Unknown"), + labelId = x.labelId.toString, + criterionId = x.criterionId.toString, + criterionText = x.criteria, + armIds = x.armIds.map(_.toString).toList, + isCompound = x.isCompound, + isDefining = x.isDefining + ) +} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportTrialList.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportTrialList.scala new file mode 100644 index 0000000..93ee42e --- /dev/null +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportTrialList.scala @@ -0,0 +1,15 @@ +package xyz.driver.pdsuidomain.formats.json.export + +import play.api.libs.json.{Format, Json} +import xyz.driver.pdsuidomain.entities.export.trial.ExportTrial + +final case class ApiExportTrialList(trials: Seq[ApiExportTrial]) + +object ApiExportTrialList { + + implicit val format: Format[ApiExportTrialList] = Json.format + + def fromDomain(trialList: Seq[ExportTrial]) = ApiExportTrialList( + trials = trialList.map(ApiExportTrial.fromDomain) + ) +} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportTrialWithLabels.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportTrialWithLabels.scala new file mode 100644 index 0000000..dd855f7 --- /dev/null +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportTrialWithLabels.scala @@ -0,0 +1,38 @@ +package xyz.driver.pdsuidomain.formats.json.export + +import java.time.ZoneId + +import play.api.libs.functional.syntax._ +import play.api.libs.json.{Format, JsPath} +import xyz.driver.pdsuidomain.entities.export.trial.ExportTrialWithLabels + +final case class ApiExportTrialWithLabels(nctId: String, + trialId: String, + condition: String, + lastReviewed: Long, + labelVersion: Long, + arms: List[ApiExportTrialArm], + criteria: List[ApiExportTrialLabelCriterion]) + +object ApiExportTrialWithLabels { + + implicit val format: Format[ApiExportTrialWithLabels] = ( + (JsPath \ "nctId").format[String] and + (JsPath \ "trialId").format[String] and + (JsPath \ "disease").format[String] and + (JsPath \ "lastReviewed").format[Long] and + (JsPath \ "labelVersion").format[Long] and + (JsPath \ "arms").format[List[ApiExportTrialArm]] and + (JsPath \ "criteria").format[List[ApiExportTrialLabelCriterion]] + ) (ApiExportTrialWithLabels.apply, unlift(ApiExportTrialWithLabels.unapply)) + + def fromDomain(x: ExportTrialWithLabels) = ApiExportTrialWithLabels( + nctId = x.nctId.id, + trialId = x.trialId.toString, + condition = x.condition, + lastReviewed = x.lastReviewed.atZone(ZoneId.of("Z")).toEpochSecond, + labelVersion = x.labelVersion, + arms = x.arms.map(ApiExportTrialArm.fromDomain), + criteria = x.criteria.map(ApiExportTrialLabelCriterion.fromDomain) + ) +} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/linkedpatient/ApiLinkedPatient.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/linkedpatient/ApiLinkedPatient.scala index 20d4a74..327bda2 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/linkedpatient/ApiLinkedPatient.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/linkedpatient/ApiLinkedPatient.scala @@ -1,4 +1,3 @@ - package xyz.driver.pdsuidomain.formats.json.linkedpatient import java.util.UUID @@ -7,10 +6,7 @@ import play.api.libs.json.{Format, Json} import xyz.driver.pdsuicommon.domain._ import xyz.driver.pdsuidomain.services.LinkedPatientService.RichLinkedPatient -case class ApiLinkedPatient(email: String, - name: String, - patientId: UUID, - trialId: String) { +final case class ApiLinkedPatient(email: String, name: String, patientId: UUID, trialId: String) { def toDomain = RichLinkedPatient( email = Email(email), @@ -28,6 +24,6 @@ object ApiLinkedPatient { email = entity.email.value, name = entity.name, patientId = entity.patientId.id, - trialId = entity.trialId.id + trialId = entity.trialId.id ) } diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/queue/ApiQueueUploadItem.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/queue/ApiQueueUploadItem.scala new file mode 100644 index 0000000..cd76670 --- /dev/null +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/queue/ApiQueueUploadItem.scala @@ -0,0 +1,38 @@ +package xyz.driver.pdsuidomain.formats.json.queue + +import java.time.LocalDateTime + +import xyz.driver.pdsuicommon.concurrent.BridgeUploadQueue +import play.api.libs.json.{Format, Json} + +final case class ApiQueueUploadItem(kind: String, + tag: String, + created: LocalDateTime, + attempts: Int, + nextAttempt: LocalDateTime, + completed: Boolean) { + def toDomain = BridgeUploadQueue.Item( + kind = kind, + tag = tag, + created = created, + attempts = attempts, + nextAttempt = nextAttempt, + completed = true, + dependencyKind = None, + dependencyTag = None + ) +} + +object ApiQueueUploadItem { + + def fromDomain(domain: BridgeUploadQueue.Item) = ApiQueueUploadItem( + kind = domain.kind, + tag = domain.tag, + created = domain.created, + attempts = domain.attempts, + nextAttempt = domain.nextAttempt, + completed = domain.completed + ) + + implicit val format: Format[ApiQueueUploadItem] = Json.format[ApiQueueUploadItem] +} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/userhistory/ApiUserHistory.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/userhistory/ApiUserHistory.scala index befff05..2d0df80 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/userhistory/ApiUserHistory.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/userhistory/ApiUserHistory.scala @@ -27,7 +27,7 @@ object ApiUserHistory { (JsPath \ "state").format[String] and (JsPath \ "action").format[String] and (JsPath \ "created").format[ZonedDateTime] - ) (ApiUserHistory.apply, unlift(ApiUserHistory.unapply)) + )(ApiUserHistory.apply, unlift(ApiUserHistory.unapply)) def fromDomain(x: UserHistory) = ApiUserHistory( id = x.id.id, -- cgit v1.2.3