blob: 82e3a3fdb838348a33dcf2165c3265e3a1ab61c0 (
plain) (
tree)
|
|
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))
}
|