From 5832f63b84d7388441d1200f2442dc1e9de0225c Mon Sep 17 00:00:00 2001 From: vlad Date: Tue, 27 Jun 2017 17:13:02 -0700 Subject: All PDS UI domain models, API case classes, service traits and necessary utils moved to pdsui-common --- .../formats/json/trial/ApiPartialTrial.scala | 44 ++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 src/main/scala/xyz/driver/pdsuidomain/formats/json/trial/ApiPartialTrial.scala (limited to 'src/main/scala/xyz/driver/pdsuidomain/formats/json/trial/ApiPartialTrial.scala') diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/trial/ApiPartialTrial.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/trial/ApiPartialTrial.scala new file mode 100644 index 0000000..0dc1446 --- /dev/null +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/trial/ApiPartialTrial.scala @@ -0,0 +1,44 @@ +package xyz.driver.pdsuidomain.formats.json.trial + +import java.util.UUID + +import xyz.driver.pdsuicommon.domain.{LongId, UuidId} +import xyz.driver.pdsuidomain.entities.Trial +import org.davidbild.tristate.Tristate +import org.davidbild.tristate.contrib.play.ToJsPathOpsFromJsPath +import play.api.libs.functional.syntax._ +import play.api.libs.json._ + +final case class ApiPartialTrial(hypothesisId: Tristate[UUID], + studyDesignId: Tristate[Long], + overview: Tristate[String], + title: Tristate[String]) { + + def applyTo(orig: Trial): Trial = { + orig.copy( + hypothesisId = hypothesisId.map(UuidId(_)).cata(Some(_), None, orig.hypothesisId), + studyDesignId = studyDesignId.map(LongId(_)).cata(Some(_), None, orig.studyDesignId), + overview = overview.cata(Some(_), None, orig.overview), + title = title.cata(Some(_).getOrElse(""), "", orig.title) + ) + } +} + +object ApiPartialTrial { + + private val reads: Reads[ApiPartialTrial] = ( + (JsPath \ "hypothesisId").readTristate[UUID] and + (JsPath \ "studyDesignId").readTristate[Long] and + (JsPath \ "overview").readTristate[String] and + (JsPath \ "title").readTristate[String] + ) (ApiPartialTrial.apply _) + + private val writes: Writes[ApiPartialTrial] = ( + (JsPath \ "hypothesisId").writeTristate[UUID] and + (JsPath \ "studyDesignId").writeTristate[Long] and + (JsPath \ "overview").writeTristate[String] and + (JsPath \ "title").writeTristate[String] + ) (unlift(ApiPartialTrial.unapply)) + + implicit val format: Format[ApiPartialTrial] = Format(reads, writes) +} -- cgit v1.2.3