diff options
author | Kseniya Tomskikh <ktomskih@datamonsters.co> | 2018-01-10 12:09:10 +0700 |
---|---|---|
committer | Kseniya Tomskikh <ktomskih@datamonsters.co> | 2018-01-10 12:09:10 +0700 |
commit | 7d9c3a7a0de129eef06d5b2eac92aafec1229098 (patch) | |
tree | 74c839223186e73c017b2e07a5cd43e9754498e5 /src/main/scala/xyz/driver/pdsuidomain/formats/json | |
parent | 2456ac8336df69734890b325b0b2a5a1182e93e2 (diff) | |
parent | 5bbb0bc66db5b49eb0e3f197be17798fb8093f2a (diff) | |
download | rest-query-7d9c3a7a0de129eef06d5b2eac92aafec1229098.tar.gz rest-query-7d9c3a7a0de129eef06d5b2eac92aafec1229098.tar.bz2 rest-query-7d9c3a7a0de129eef06d5b2eac92aafec1229098.zip |
Merge branch 'master' into PDSUI-2432
Diffstat (limited to 'src/main/scala/xyz/driver/pdsuidomain/formats/json')
-rw-r--r-- | src/main/scala/xyz/driver/pdsuidomain/formats/json/documentissue.scala | 12 | ||||
-rw-r--r-- | src/main/scala/xyz/driver/pdsuidomain/formats/json/trialissue.scala | 88 |
2 files changed, 86 insertions, 14 deletions
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/documentissue.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/documentissue.scala index d17a45c..037a3ad 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/documentissue.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/documentissue.scala @@ -24,14 +24,14 @@ object documentissue { .map(_.convertTo[Boolean]) .getOrElse(deserializationError(s"DocumentIssue json object does not contain `archiveRequired` field: $json")) - val startPage = fields.get("startPage").map(_.convertTo[Double]) - val endPage = fields.get("endPage").map(_.convertTo[Double]) + val startPage = fields.get("startPage").map(_.convertTo[Option[Double]]) + val endPage = fields.get("endPage").map(_.convertTo[Option[Double]]) orig.copy( text = text, archiveRequired = archiveRequired, - startPage = startPage, - endPage = endPage + startPage = startPage.getOrElse(orig.startPage), + endPage = endPage.getOrElse(orig.endPage) ) case _ => deserializationError(s"Expected Json Object as partial DocumentIssue, but got $json") @@ -49,8 +49,8 @@ object documentissue { .getOrElse(deserializationError(s"DocumentIssue json object does not contain `text` field: $json")) val id = fields.get("id").map(_.convertTo[LongId[DocumentIssue]]) - val startPage = fields.get("startPage").map(_.convertTo[Double]) - val endPage = fields.get("endPage").map(_.convertTo[Double]) + val startPage = fields.get("startPage").flatMap(_.convertTo[Option[Double]]) + val endPage = fields.get("endPage").flatMap(_.convertTo[Option[Double]]) DocumentIssue( id = id.getOrElse(LongId(0)), diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/trialissue.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/trialissue.scala index f9bb0b6..79882c2 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/trialissue.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/trialissue.scala @@ -2,16 +2,26 @@ package xyz.driver.pdsuidomain.formats.json import java.time.LocalDateTime -import spray.json._ +import spray.json.{RootJsonReader, _} +import xyz.driver.core.{Id, auth} import xyz.driver.core.auth.User import xyz.driver.core.json._ import xyz.driver.pdsuicommon.domain.{LongId, StringId} import xyz.driver.pdsuidomain.entities._ object trialissue { + import DefaultJsonProtocol._ import common._ + private def deserializationErrorFieldMessage(field: String, json: JsValue)(implicit className: String) = { + deserializationError(s"$className json object do not contain '$field' field: $json") + } + + private def deserializationErrorEntityMessage(json: JsValue)(implicit className: String) = { + deserializationError(s"Expected Json Object as $className, but got $json") + } + def applyUpdateToTrialIssue(json: JsValue, orig: TrialIssue): TrialIssue = { json.asJsObject.getFields("text", "evidence", "archiveRequired", "meta") match { case Seq(text, evidence, archiveRequired, meta) => @@ -48,15 +58,77 @@ object trialissue { implicit val trialIssueWriter = new RootJsonWriter[TrialIssue] { override def write(obj: TrialIssue) = JsObject( - "id" -> obj.id.toJson, - "text" -> obj.text.toJson, - "lastUpdate" -> obj.lastUpdate.toJson, - "userId" -> obj.userId.toJson, - "isDraft" -> obj.isDraft.toJson, - "evidence" -> obj.evidence.toJson, + "id" -> obj.id.toJson, + "text" -> obj.text.toJson, + "lastUpdate" -> obj.lastUpdate.toJson, + "userId" -> obj.userId.toJson, + "isDraft" -> obj.isDraft.toJson, + "evidence" -> obj.evidence.toJson, "archiveRequired" -> obj.archiveRequired.toJson, - "meta" -> obj.meta.toJson + "meta" -> obj.meta.toJson ) } + def trialIssueReader(trialId: StringId[Trial]): RootJsonReader[TrialIssue] = + new RootJsonReader[TrialIssue] { + implicit val className: String = "TrialIssue" + + override def read(json: JsValue): TrialIssue = json match { + case JsObject(fields) => + val id = fields + .get("id") + .map(_.convertTo[LongId[TrialIssue]]) + .getOrElse(deserializationErrorFieldMessage("id", json)) + + val text = fields + .get("text") + .map(_.convertTo[String]) + .getOrElse(deserializationErrorFieldMessage("text", json)) + + val lastUpdate = fields + .get("lastUpdate") + .map(_.convertTo[LocalDateTime]) + .getOrElse(deserializationErrorFieldMessage("lastUpdate", json)) + + val userId = fields + .get("userId") + .map(_.convertTo[Id[auth.User]]) + .getOrElse(deserializationErrorFieldMessage("userId", json)) + + val isDraft = fields + .get("isDraft") + .map(_.convertTo[Boolean]) + .getOrElse(deserializationErrorFieldMessage("isDraft", json)) + + val evidence = fields + .get("evidence") + .map(_.convertTo[String]) + .getOrElse(deserializationErrorFieldMessage("evidence", json)) + + val archiveRequired = fields + .get("archiveRequired") + .map(_.convertTo[Boolean]) + .getOrElse(deserializationErrorFieldMessage("archiveRequired", json)) + + val meta = fields + .get("meta") + .map(_.convertTo[String]) + .getOrElse(deserializationErrorFieldMessage("meta", json)) + + TrialIssue( + id = id, + userId = userId, + trialId = trialId, + lastUpdate = lastUpdate, + isDraft = isDraft, + text = text, + evidence = evidence, + archiveRequired = archiveRequired, + meta = meta + ) + + case _ => deserializationErrorEntityMessage(json) + } + } + } |