diff options
Diffstat (limited to 'src/main/scala/xyz/driver/pdsuidomain/formats/json/record/ApiUpdateRecord.scala')
-rw-r--r-- | src/main/scala/xyz/driver/pdsuidomain/formats/json/record/ApiUpdateRecord.scala | 52 |
1 files changed, 0 insertions, 52 deletions
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/record/ApiUpdateRecord.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/record/ApiUpdateRecord.scala deleted file mode 100644 index 05d5a60..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/record/ApiUpdateRecord.scala +++ /dev/null @@ -1,52 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.record - -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.{StringId, TextJson, User} -import xyz.driver.pdsuicommon.json.JsonSerializer -import xyz.driver.pdsuidomain.entities.MedicalRecord.Meta -import xyz.driver.pdsuidomain.entities._ - -final case class ApiUpdateRecord(status: Option[String], assignee: Tristate[String], meta: Tristate[String]) { - - def applyTo(orig: MedicalRecord): MedicalRecord = { - orig.copy( - status = status.map(MedicalRecordStatus.statusFromString).getOrElse(orig.status), - assignee = assignee.map(StringId[User]).cata(Some(_), None, orig.assignee), - meta = meta.cata(x => Some(TextJson(JsonSerializer.deserialize[List[Meta]](x))), None, orig.meta) - ) - } -} - -object ApiUpdateRecord { - - private val reads: Reads[ApiUpdateRecord] = ( - (JsPath \ "status").readNullable[String]( - Reads - .of[String] - .filter(ValidationError("unknown status"))({ - case x if MedicalRecordStatus.statusFromString.isDefinedAt(x) => true - case _ => false - })) and - (JsPath \ "assignee").readTristate[String] and - (JsPath \ "meta") - .readTristate(Reads { x => - JsSuccess(Json.stringify(x)) - }) - .map { - case Tristate.Present("[]") => Tristate.Absent - case x => x - } - )(ApiUpdateRecord.apply _) - - private val writes: Writes[ApiUpdateRecord] = ( - (JsPath \ "status").writeNullable[String] and - (JsPath \ "assignee").writeTristate[String] and - (JsPath \ "meta").writeTristate(Writes[String](Json.parse)) - )(unlift(ApiUpdateRecord.unapply)) - - implicit val format: Format[ApiUpdateRecord] = Format(reads, writes) -} |