diff options
author | vlad <vlad@driver.xyz> | 2017-10-01 12:50:54 -0700 |
---|---|---|
committer | vlad <vlad@driver.xyz> | 2017-10-01 12:50:54 -0700 |
commit | b5e0d5f91b52013bc11ef3ea586a54bb001577bc (patch) | |
tree | 58d6ca321e1f9176d02e24fbde6321bddadb21ee /src/main/scala/xyz/driver/pdsuidomain/formats | |
parent | 46b354b6a49c0843fefc5794f2351f52b98102bd (diff) | |
download | rest-query-b5e0d5f91b52013bc11ef3ea586a54bb001577bc.tar.gz rest-query-b5e0d5f91b52013bc11ef3ea586a54bb001577bc.tar.bz2 rest-query-b5e0d5f91b52013bc11ef3ea586a54bb001577bc.zip |
Fixing IN in filters, Model from EVLS added to common, Reusing domain model labelsv0.5.1
Diffstat (limited to 'src/main/scala/xyz/driver/pdsuidomain/formats')
13 files changed, 116 insertions, 77 deletions
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/category/ApiCategory.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/category/ApiCategory.scala deleted file mode 100644 index f1e15f3..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/category/ApiCategory.scala +++ /dev/null @@ -1,23 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.category - -import play.api.libs.functional.syntax._ -import play.api.libs.json.{Format, JsPath} -import xyz.driver.pdsuidomain.entities.CategoryWithLabels -import xyz.driver.pdsuidomain.formats.json.label.ApiLabel - -final case class ApiCategory(id: Long, name: String, labels: List[ApiLabel]) - -object ApiCategory { - - implicit val format: Format[ApiCategory] = ( - (JsPath \ "id").format[Long] and - (JsPath \ "name").format[String] and - (JsPath \ "labels").format[List[ApiLabel]] - )(ApiCategory.apply, unlift(ApiCategory.unapply)) - - def fromDomain(categoryWithLabels: CategoryWithLabels) = ApiCategory( - id = categoryWithLabels.category.id.id, - name = categoryWithLabels.category.name, - labels = categoryWithLabels.labels.map(x => ApiLabel(x.id.id, x.name, x.categoryId.id)) - ) -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/keyword/ApiKeyword.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/keyword/ApiKeyword.scala deleted file mode 100644 index a9d02fc..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/keyword/ApiKeyword.scala +++ /dev/null @@ -1,23 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.keyword - -import xyz.driver.pdsuidomain.entities.KeywordWithLabels -import play.api.libs.functional.syntax._ -import play.api.libs.json.{Format, JsPath} -import xyz.driver.pdsuidomain.formats.json.label.ApiLabel - -final case class ApiKeyword(id: Long, keyword: String, labels: List[ApiLabel]) - -object ApiKeyword { - - implicit val format: Format[ApiKeyword] = ( - (JsPath \ "id").format[Long] and - (JsPath \ "keyword").format[String] and - (JsPath \ "labels").format[List[ApiLabel]] - )(ApiKeyword.apply, unlift(ApiKeyword.unapply)) - - def fromDomain(keywordWithLabels: KeywordWithLabels) = ApiKeyword( - id = keywordWithLabels.keyword.id.id, - keyword = keywordWithLabels.keyword.keyword, - labels = keywordWithLabels.labels.map(x => ApiLabel(x.id.id, x.name, x.categoryId.id)) - ) -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/label/ApiCriterionLabel.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/label/ApiCriterionLabel.scala index 7a65af8..d486749 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/label/ApiCriterionLabel.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/label/ApiCriterionLabel.scala @@ -1,10 +1,11 @@ package xyz.driver.pdsuidomain.formats.json.label import xyz.driver.pdsuicommon.domain.{FuzzyValue, LongId} -import xyz.driver.pdsuidomain.entities.{Category, Criterion, CriterionLabel, Label} +import xyz.driver.pdsuidomain.entities.{Criterion, CriterionLabel} import play.api.data.validation.ValidationError import play.api.libs.functional.syntax._ import play.api.libs.json._ +import xyz.driver.entities.labels.{Label, LabelCategory} /** * @param value Yes|No @@ -18,7 +19,7 @@ final case class ApiCriterionLabel(labelId: Option[Long], id = LongId(0L), labelId = labelId.map(LongId[Label]), criterionId = criterionId, - categoryId = categoryId.map(LongId[Category]), + categoryId = categoryId.map(LongId[LabelCategory]), value = value.map { case "Yes" => true case "No" => false diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/label/ApiExtractedDataLabel.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/label/ApiExtractedDataLabel.scala index cb45025..f8161af 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/label/ApiExtractedDataLabel.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/label/ApiExtractedDataLabel.scala @@ -1,10 +1,11 @@ package xyz.driver.pdsuidomain.formats.json.label import xyz.driver.pdsuicommon.domain.{FuzzyValue, LongId} -import xyz.driver.pdsuidomain.entities.{Category, ExtractedData, ExtractedDataLabel, Label} +import xyz.driver.pdsuidomain.entities.{ExtractedData, ExtractedDataLabel} import play.api.data.validation.ValidationError import play.api.libs.functional.syntax._ import play.api.libs.json._ +import xyz.driver.entities.labels.{Label, LabelCategory} final case class ApiExtractedDataLabel(id: Option[Long], categoryId: Option[Long], value: Option[String]) { @@ -12,7 +13,7 @@ final case class ApiExtractedDataLabel(id: Option[Long], categoryId: Option[Long id = LongId(0), dataId = dataId, labelId = id.map(LongId[Label]), - categoryId = categoryId.map(LongId[Category]), + categoryId = categoryId.map(LongId[LabelCategory]), value = value.map(FuzzyValue.fromString) ) } diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/label/ApiLabel.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/label/ApiLabel.scala deleted file mode 100644 index 042b380..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/label/ApiLabel.scala +++ /dev/null @@ -1,22 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.label - -import play.api.libs.functional.syntax._ -import play.api.libs.json.{Format, JsPath} -import xyz.driver.pdsuidomain.entities.Label - -final case class ApiLabel(id: Long, name: String, categoryId: Long) - -object ApiLabel { - - implicit val format: Format[ApiLabel] = ( - (JsPath \ "id").format[Long] and - (JsPath \ "name").format[String] and - (JsPath \ "categoryId").format[Long] - )(ApiLabel.apply, unlift(ApiLabel.unapply)) - - def fromDomain(x: Label) = ApiLabel( - id = x.id.id, - name = x.name, - categoryId = x.categoryId.id - ) -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/trial/ApiPatientCriterion.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/trial/ApiPatientCriterion.scala index 75347f4..6eeb40b 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/trial/ApiPatientCriterion.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/trial/ApiPatientCriterion.scala @@ -3,10 +3,11 @@ package xyz.driver.pdsuidomain.formats.json.patient.trial import java.time.{ZoneId, ZonedDateTime} import xyz.driver.pdsuicommon.domain.{FuzzyValue, LongId} -import xyz.driver.pdsuidomain.entities.{Label, PatientCriterion, PatientCriterionArm} +import xyz.driver.pdsuidomain.entities.{PatientCriterion, PatientCriterionArm} import play.api.data.validation.ValidationError import play.api.libs.functional.syntax._ import play.api.libs.json.{Format, JsPath, Reads, Writes} +import xyz.driver.entities.labels.Label final case class ApiPatientCriterion(id: Long, labelId: Long, diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/criterion.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/criterion.scala index 732bcad..743f885 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/criterion.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/criterion.scala @@ -1,6 +1,7 @@ package xyz.driver.pdsuidomain.formats.json.sprayformats import spray.json._ +import xyz.driver.entities.labels.{Label, LabelCategory} import xyz.driver.pdsuicommon.domain.{LongId, StringId} import xyz.driver.pdsuidomain.entities._ import xyz.driver.pdsuidomain.services.CriterionService.RichCriterion @@ -29,7 +30,7 @@ object criterion { val categoryId = fields .get("categoryId") - .map(_.convertTo[LongId[Category]]) + .map(_.convertTo[LongId[LabelCategory]]) val value = fields .get("value") diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/documenttype.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/documenttype.scala index 8119d35..7ec6ef5 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/documenttype.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/documenttype.scala @@ -1,7 +1,6 @@ package xyz.driver.pdsuidomain.formats.json.sprayformats import spray.json._ -import xyz.driver.pdsuidomain.entities._ import xyz.driver.pdsuidomain.entities.DocumentType object documenttype { diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/eligibility.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/eligibility.scala new file mode 100644 index 0000000..30ceae2 --- /dev/null +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/eligibility.scala @@ -0,0 +1,101 @@ +package xyz.driver.pdsuidomain.formats.json.sprayformats + +import spray.json._ +import DefaultJsonProtocol._ +import xyz.driver.core.Id +import xyz.driver.core.json._ +import xyz.driver.entities.labels.LabelValue +import xyz.driver.pdsuidomain.entities.eligibility._ + +object eligibility { + import xyz.driver.formats.json.assay._ + import xyz.driver.formats.json.common._ + import xyz.driver.formats.json.labels._ + import xyz.driver.formats.json.process._ + import xyz.driver.pdsuidomain.formats.json.sprayformats.document._ + import xyz.driver.pdsuidomain.formats.json.sprayformats.record._ + import xyz.driver.pdsuidomain.formats.json.sprayformats.export._ + + implicit val molecularDocumentFormat: RootJsonFormat[MolecularEvidenceDocument] = jsonFormat7( + MolecularEvidenceDocument) + implicit val clinicalDocumentFormat: RootJsonFormat[ClinicalEvidenceDocument] = jsonFormat7(ClinicalEvidenceDocument) + + implicit val evidenceDocumentFormat: RootJsonFormat[EvidenceDocument] = + GadtJsonFormat.create[EvidenceDocument]("documentType") { + case _: MolecularEvidenceDocument => "Molecular" + case _: ClinicalEvidenceDocument => "Clinical" + } { + case "Molecular" => molecularDocumentFormat + case "Clinical" => clinicalDocumentFormat + } + + implicit object evidenceFormat extends RootJsonFormat[Evidence] { + + override def write(evidence: Evidence): JsValue = { + JsObject( + "evidenceId" -> evidence.evidenceId.toJson, + "evidenceText" -> evidence.evidenceText.toJson, + "labelValue" -> evidence.labelValue.toJson, + "document" -> evidence.document.toJson, + "isPrimaryValue" -> evidence.isPrimaryValue.toJson + ) + } + + override def read(json: JsValue): Evidence = { + json match { + case JsObject(fields) => + val evidenceId = fields + .get("evidenceId") + .map(_.convertTo[Id[Evidence]]) + + val evidenceText = fields + .get("evidenceText") + .map(_.convertTo[String]) + .getOrElse(deserializationError(s"Evidence json object do not contain 'evidenceText' field: $json")) + + val labelValue = fields + .get("labelValue") + .map(_.convertTo[LabelValue]) + .getOrElse(deserializationError(s"Evidence json object do not contain 'labelValue' field: $json")) + + val isDriverDocument = fields + .get("document") + .flatMap { + case JsObject(fieldMap) => + fieldMap + .get("isDriverDocument") + .map(_.convertTo[Boolean]) + case _ => deserializationError(s"Expected Json Object as 'isDriverDocument', but got $json") + } + .getOrElse(deserializationError(s"Evidence json object do not contain 'document' field: $json")) + + val document = customDocumentParser(isDriverDocument, fields, json) + + val isPrimaryValue = fields + .get("isPrimaryValue") + .map(_.convertTo[Option[Boolean]]) + .getOrElse(deserializationError(s"Evidence json object do not contain 'isPrimaryValue' field: $json")) + + Evidence(evidenceId, evidenceText, labelValue, document, isPrimaryValue) + case _ => deserializationError(s"Expected Json Object as 'Evidence', but got $json") + } + } + + def customDocumentParser(isDriverDocument: Boolean, + fields: Map[String, JsValue], + json: JsValue): EvidenceDocument = { + fields.get("document").fold { deserializationError(s"Expected Json Object as 'Document', but got $json") } { + document => + if (isDriverDocument) document.convertTo[MolecularEvidenceDocument] + else document.convertTo[ClinicalEvidenceDocument] + } + } + } + + implicit def labelWithEvidenceJsonFormat: RootJsonFormat[LabelWithEvidence] = jsonFormat2(LabelWithEvidence) + + implicit def labelRankingFormat: RootJsonFormat[LabelMismatchRank] = jsonFormat4(LabelMismatchRank) + implicit def labelRankingsFormat: RootJsonFormat[MismatchRankedLabels] = jsonFormat2(MismatchRankedLabels) + + implicit def matchedPatientFormat: RootJsonFormat[MatchedPatient] = jsonFormat6(MatchedPatient) +} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/export.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/export.scala index 2a1fe46..39d5c59 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/export.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/export.scala @@ -1,7 +1,8 @@ package xyz.driver.pdsuidomain.formats.json.sprayformats import spray.json._ -import xyz.driver.pdsuidomain.entities.{Arm, Criterion, Label} +import xyz.driver.entities.labels.Label +import xyz.driver.pdsuidomain.entities.{Arm, Criterion} import xyz.driver.pdsuidomain.entities.export.patient._ import xyz.driver.pdsuidomain.entities.export.trial.{ExportTrialArm, ExportTrialLabelCriterion, ExportTrialWithLabels} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/extracteddata.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/extracteddata.scala index 42473bc..d6eadbd 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/extracteddata.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/extracteddata.scala @@ -1,6 +1,7 @@ package xyz.driver.pdsuidomain.formats.json.sprayformats import spray.json._ +import xyz.driver.entities.labels.{Label, LabelCategory} import xyz.driver.pdsuicommon.domain.{FuzzyValue, LongId, TextJson} import xyz.driver.pdsuidomain.entities._ import xyz.driver.pdsuidomain.services.ExtractedDataService.RichExtractedData @@ -39,7 +40,7 @@ object extracteddata { val categoryId = fields .get("categoryId") - .map(_.convertTo[LongId[Category]]) + .map(_.convertTo[LongId[LabelCategory]]) val value = fields .get("value") diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientcriterion.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientcriterion.scala index 53e927d..b091746 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientcriterion.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientcriterion.scala @@ -1,6 +1,7 @@ package xyz.driver.pdsuidomain.formats.json.sprayformats import spray.json._ +import xyz.driver.entities.labels.Label import xyz.driver.pdsuicommon.domain.{FuzzyValue, LongId} import xyz.driver.pdsuidomain.entities._ import xyz.driver.pdsuidomain.services.PatientCriterionService.DraftPatientCriterion diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/providerttype.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/providertype.scala index 385feb2..385feb2 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/providerttype.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/providertype.scala |