diff options
Diffstat (limited to 'src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/label/ApiPartialPatientLabel.scala')
-rw-r--r-- | src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/label/ApiPartialPatientLabel.scala | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/label/ApiPartialPatientLabel.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/label/ApiPartialPatientLabel.scala new file mode 100644 index 0000000..82e3a3f --- /dev/null +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/label/ApiPartialPatientLabel.scala @@ -0,0 +1,38 @@ +package xyz.driver.pdsuidomain.formats.json.patient.label + +import xyz.driver.pdsuidomain.entities.PatientLabel +import org.davidbild.tristate.Tristate +import org.davidbild.tristate.contrib.play.ToJsPathOpsFromJsPath +import play.api.data.validation.ValidationError +import play.api.libs.functional.syntax._ +import play.api.libs.json._ +import xyz.driver.pdsuicommon.domain.FuzzyValue + +final case class ApiPartialPatientLabel(primaryValue: Option[String], + verifiedPrimaryValue: Tristate[String]) { + + def applyTo(orig: PatientLabel): PatientLabel = { + orig.copy( + primaryValue = primaryValue.map(FuzzyValue.fromString).orElse(orig.primaryValue), + verifiedPrimaryValue = verifiedPrimaryValue.cata(x => Some(FuzzyValue.fromString(x)), None, orig.verifiedPrimaryValue) + ) + } + +} + +object ApiPartialPatientLabel { + + implicit val format: Format[ApiPartialPatientLabel] = ( + (JsPath \ "primaryValue").formatNullable[String](Format( + Reads.of[String].filter(ValidationError("unknown primary value"))({ + case x if FuzzyValue.fromString.isDefinedAt(x) => true + case _ => false + }), Writes.of[String])) and + (JsPath \ "verifiedPrimaryValue").formatTristate[String](Format( + Reads.of[String].filter(ValidationError("unknown verified primary value"))({ + case x if FuzzyValue.fromString.isDefinedAt(x) => true + case _ => false + }), Writes.of[String])) + ) (ApiPartialPatientLabel.apply, unlift(ApiPartialPatientLabel.unapply)) + +} |