aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/xyz/driver/pdsuidomain/formats/json/message/ApiPartialMessage.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/scala/xyz/driver/pdsuidomain/formats/json/message/ApiPartialMessage.scala')
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/message/ApiPartialMessage.scala84
1 files changed, 84 insertions, 0 deletions
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/message/ApiPartialMessage.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/message/ApiPartialMessage.scala
new file mode 100644
index 0000000..151234c
--- /dev/null
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/message/ApiPartialMessage.scala
@@ -0,0 +1,84 @@
+package xyz.driver.pdsuidomain.formats.json.message
+
+import java.time.LocalDateTime
+
+import xyz.driver.pdsuicommon.domain._
+import play.api.libs.functional.syntax._
+import play.api.libs.json.{Format, JsPath}
+import xyz.driver.pdsuidomain.entities.Message
+
+final case class ApiPartialMessage(text: Option[String],
+ recordId: Option[Long],
+ documentId: Option[Long],
+ patientId: Option[String],
+ trialId: Option[String],
+ startPage: Option[Double],
+ endPage: Option[Double],
+ evidence: Option[String],
+ archiveRequired: Option[Boolean],
+ meta: Option[String]) {
+
+ def toDomain(userId: LongId[User]) = Message(
+ id = LongId(0),
+ text = text.getOrElse(""),
+ userId = userId,
+ isDraft = true,
+ recordId = recordId.map(LongId(_)),
+ documentId = documentId.map(LongId(_)),
+ patientId = patientId.map(UuidId(_)),
+ trialId = trialId.map(StringId(_)),
+ startPage = startPage,
+ endPage = endPage,
+ evidence = evidence,
+ archiveRequired = archiveRequired,
+ meta = meta,
+ lastUpdate = LocalDateTime.MIN
+ )
+
+ def applyTo(orig: Message): Message = {
+ orig.copy(
+ text = text.getOrElse(""),
+ recordId = recordId.map(LongId(_)),
+ documentId = documentId.map(LongId(_)),
+ patientId = patientId.map(UuidId(_)),
+ trialId = trialId.map(StringId(_)),
+ startPage = startPage,
+ endPage = endPage,
+ evidence = evidence,
+ archiveRequired = archiveRequired,
+ meta = meta,
+ lastUpdate = LocalDateTime.MIN
+ )
+ }
+
+}
+
+object ApiPartialMessage {
+
+ implicit val format: Format[ApiPartialMessage] = (
+ (JsPath \ "text").formatNullable[String] and
+ (JsPath \ "recordId").formatNullable[Long] and
+ (JsPath \ "documentId").formatNullable[Long] and
+ (JsPath \ "patientId").formatNullable[String] and
+ (JsPath \ "trialId").formatNullable[String] and
+ (JsPath \ "startPage").formatNullable[Double] and
+ (JsPath \ "endPage").formatNullable[Double] and
+ (JsPath \ "evidence").formatNullable[String] and
+ (JsPath \ "archiveRequired").formatNullable[Boolean] and
+ (JsPath \ "meta").formatNullable[String]
+ ) (ApiPartialMessage.apply, unlift(ApiPartialMessage.unapply))
+
+ def fromDomain(domain: Message) = ApiPartialMessage(
+ text = Some(domain.text),
+ recordId = domain.recordId.map(_.id),
+ documentId = domain.documentId.map(_.id),
+ patientId = domain.patientId.map(_.toString),
+ trialId = domain.trialId.map(_.toString),
+ startPage = domain.startPage,
+ endPage = domain.endPage,
+ evidence = domain.evidence,
+ archiveRequired = domain.archiveRequired,
+ meta = domain.meta
+ )
+
+}