aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/ListResponse.scala
diff options
context:
space:
mode:
authorKseniya Tomskikh <ktomskih@datamonsters.co>2017-10-18 15:00:26 +0700
committerKseniya Tomskikh <ktomskih@datamonsters.co>2017-10-19 13:02:44 +0700
commit61d03bffcb6000268bb600d5336fb490056837f9 (patch)
treedbad0340d28dbe5835c80cf75f93d142a5327578 /src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/ListResponse.scala
parent0c8a7c3f1920e38a0606de91be5793c4f2a1d40a (diff)
downloadrest-query-61d03bffcb6000268bb600d5336fb490056837f9.tar.gz
rest-query-61d03bffcb6000268bb600d5336fb490056837f9.tar.bz2
rest-query-61d03bffcb6000268bb600d5336fb490056837f9.zip
Created list response for each entity
Diffstat (limited to 'src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/ListResponse.scala')
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/ListResponse.scala62
1 files changed, 0 insertions, 62 deletions
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/ListResponse.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/ListResponse.scala
deleted file mode 100644
index 4afe0ee..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/ListResponse.scala
+++ /dev/null
@@ -1,62 +0,0 @@
-package xyz.driver.pdsuidomain.formats.json.sprayformats
-
-import java.time.LocalDateTime
-
-import spray.json._
-import spray.json.DefaultJsonProtocol._
-import xyz.driver.pdsuicommon.db.Pagination
-import xyz.driver.pdsuidomain.formats.json.sprayformats.common._
-
-final case class ListResponse[+T](items: Seq[T], meta: ListResponse.Meta)
-
-object ListResponse {
- private val itemsField = "items"
- private val metaField = "meta"
-
- final case class Meta(itemsCount: Int, pageNumber: Int, pageSize: Int, lastUpdate: Option[LocalDateTime])
-
- object Meta {
- def apply(itemsCount: Int, pagination: Pagination, lastUpdate: Option[LocalDateTime]): Meta = {
- Meta(
- itemsCount,
- pagination.pageNumber,
- pagination.pageSize,
- lastUpdate
- )
- }
- }
-
- implicit val listResponseMetaFormat: RootJsonFormat[Meta] = jsonFormat4(Meta.apply)
-
- implicit def listResponseWriter[T: JsonWriter]: RootJsonWriter[ListResponse[T]] =
- new RootJsonWriter[ListResponse[T]] {
- override def write(listResponse: ListResponse[T]): JsValue = {
- JsObject(
- itemsField -> listResponse.items.map(_.toJson).toJson,
- metaField -> listResponse.meta.toJson
- )
- }
- }
-
- implicit def listResponseReader[T: JsonReader]: RootJsonReader[ListResponse[T]] =
- new RootJsonReader[ListResponse[T]] {
- override def read(json: JsValue): ListResponse[T] = json match {
- case JsObject(fields) =>
- val items = fields
- .get(itemsField)
- .map {
- case JsArray(elements) => elements.map(_.convertTo[T])(collection.breakOut)
- case x => deserializationError(s"Expected Array as JsArray, but got $x")
- }
- .getOrElse(deserializationError(s"ListResponse json object does not contain `$itemsField` field: $json"))
-
- val meta = fields
- .get(metaField)
- .map(_.convertTo[Meta])
- .getOrElse(deserializationError(s"ListResponse json object does not contain `$metaField` field: $json"))
-
- ListResponse(items, meta)
- case _ => deserializationError(s"Expected ListResponse json object, but got $json")
- }
- }
-}