diff options
author | Aleksandr <ognelisar@gmail.com> | 2017-12-04 17:44:14 +0700 |
---|---|---|
committer | Aleksandr <ognelisar@gmail.com> | 2017-12-04 17:44:14 +0700 |
commit | d863fdba13bb838978321ef2d4b94473458f970a (patch) | |
tree | 398003dcbd29b8f442427a320732d5d0c7fbb7fd /src/main/scala/xyz/driver/pdsuidomain/formats/json | |
parent | 9adb1cb5725c1a6d9967a5e75895408dac198af8 (diff) | |
download | rest-query-d863fdba13bb838978321ef2d4b94473458f970a.tar.gz rest-query-d863fdba13bb838978321ef2d4b94473458f970a.tar.bz2 rest-query-d863fdba13bb838978321ef2d4b94473458f970a.zip |
Implemented RestTrialIssueService; implemented read format for trial issue
Diffstat (limited to 'src/main/scala/xyz/driver/pdsuidomain/formats/json')
-rw-r--r-- | src/main/scala/xyz/driver/pdsuidomain/formats/json/trialissue.scala | 88 |
1 files changed, 80 insertions, 8 deletions
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..dea5441 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 ) } + implicit 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) + } + } + } |