package xyz.driver.pdsuidomain.formats.json.patient.label import xyz.driver.pdsuidomain.entities.PatientLabel 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 ApiPatientLabel(id: Long, labelId: Long, primaryValue: Option[String], verifiedPrimaryValue: Option[String], score: Int, isImplicitMatch: Boolean, isVisible: Boolean, isVerified: Boolean) object ApiPatientLabel { implicit val apiPatientLabelJsonFormat: Format[ApiPatientLabel] = ( (JsPath \ "id").format[Long] and (JsPath \ "labelId").format[Long] and (JsPath \ "primaryValue").formatNullable[String](Format(Reads.of[String].filter(ValidationError("unknown value"))({ case x if FuzzyValue.fromString.isDefinedAt(x) => true case _ => false }), Writes.of[String])) and (JsPath \ "verifiedPrimaryValue").formatNullable[String](Format(Reads.of[String].filter(ValidationError("unknown value"))({ case x if FuzzyValue.fromString.isDefinedAt(x) => true case _ => false }), Writes.of[String])) and (JsPath \ "score").format[Int] and (JsPath \ "isImplicitMatch").format[Boolean] and (JsPath \ "isVisible").format[Boolean] and (JsPath \ "isVerified").format[Boolean] ) (ApiPatientLabel.apply, unlift(ApiPatientLabel.unapply)) def fromDomain(patientLabel: PatientLabel, isVerified: Boolean): ApiPatientLabel = ApiPatientLabel( id = patientLabel.id.id, labelId = patientLabel.labelId.id, primaryValue = patientLabel.primaryValue.map(FuzzyValue.valueToString), verifiedPrimaryValue = patientLabel.verifiedPrimaryValue.map(FuzzyValue.valueToString), score = patientLabel.score, isImplicitMatch = patientLabel.isImplicitMatch, isVisible = patientLabel.isVisible, isVerified = isVerified ) }