From 61d03bffcb6000268bb600d5336fb490056837f9 Mon Sep 17 00:00:00 2001 From: Kseniya Tomskikh Date: Wed, 18 Oct 2017 15:00:26 +0700 Subject: Created list response for each entity --- .../xyz/driver/pdsuidomain/ListResponse.scala | 67 ++++++++++++++++++++++ .../fakes/entities/treatmentmatching.scala | 20 +++---- .../formats/json/sprayformats/ListResponse.scala | 62 -------------------- .../formats/json/sprayformats/listresponse.scala | 45 +++++++++++++++ 4 files changed, 122 insertions(+), 72 deletions(-) create mode 100644 src/main/scala/xyz/driver/pdsuidomain/ListResponse.scala delete mode 100644 src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/ListResponse.scala create mode 100644 src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/listresponse.scala (limited to 'src/main/scala/xyz/driver/pdsuidomain') diff --git a/src/main/scala/xyz/driver/pdsuidomain/ListResponse.scala b/src/main/scala/xyz/driver/pdsuidomain/ListResponse.scala new file mode 100644 index 0000000..b0effdd --- /dev/null +++ b/src/main/scala/xyz/driver/pdsuidomain/ListResponse.scala @@ -0,0 +1,67 @@ +package xyz.driver.pdsuidomain + +import java.time.LocalDateTime + +import xyz.driver.pdsuicommon.concurrent.BridgeUploadQueue +import xyz.driver.pdsuicommon.db.Pagination +import xyz.driver.pdsuidomain.entities._ +import xyz.driver.pdsuidomain.services.CriterionService.RichCriterion +import xyz.driver.pdsuidomain.services.ExtractedDataService.RichExtractedData +import xyz.driver.pdsuidomain.services.PatientCriterionService.RichPatientCriterion +import xyz.driver.pdsuidomain.services.PatientEligibleTrialService.RichPatientEligibleTrial +import xyz.driver.pdsuidomain.services.PatientHypothesisService.RichPatientHypothesis +import xyz.driver.pdsuidomain.services.PatientLabelService.RichPatientLabel + +@SuppressWarnings(Array("org.wartremover.warts.FinalCaseClass")) +case class ListResponse[+T](items: Seq[T], meta: ListResponse.Meta) + +object ListResponse { + + 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 + ) + } + } + + trait MedicalRecordListResponse extends ListResponse[MedicalRecord] + trait MedicalRecordIssueListResponse extends ListResponse[MedicalRecordIssue] + trait MedicalRecordHistoryListResponse extends ListResponse[MedicalRecordHistory] + trait DocumentListResponse extends ListResponse[Document] + trait DocumentIssueListResponse extends ListResponse[DocumentIssue] + trait DocumentHistoryListResponse extends ListResponse[DocumentHistory] + trait RichExtractedDataListResponse extends ListResponse[RichExtractedData] + trait DocumentTypeListResponse extends ListResponse[DocumentType] + trait ProviderTypeListResponse extends ListResponse[ProviderType] + + trait TrialListResponse extends ListResponse[Trial] + trait TrialIssueListResponse extends ListResponse[TrialIssue] + trait TrialHistoryListResponse extends ListResponse[TrialHistory] + trait ArmListResponse extends ListResponse[Arm] + trait InterventionWithArmsListResponse extends ListResponse[InterventionWithArms] + trait EligibilityArmWithDiseasesListResponse extends ListResponse[EligibilityArmWithDiseases] + trait SlotArmListResponse extends ListResponse[SlotArm] + trait RichCriterionListResponse extends ListResponse[RichCriterion] + trait InterventionTypeListResponse extends ListResponse[InterventionType] + trait StudyDesignListResponse extends ListResponse[StudyDesign] + trait HypothesisListResponse extends ListResponse[Hypothesis] + + trait PatientListResponse extends ListResponse[Patient] + trait PatientIssueListResponse extends ListResponse[PatientIssue] + trait PatientHistoryListResponse extends ListResponse[PatientHistory] + trait PatientLabelListResponse extends ListResponse[PatientLabel] + trait RichPatientLabelListResponse extends ListResponse[RichPatientLabel] + trait RichPatientCriterionListResponse extends ListResponse[RichPatientCriterion] + trait RichPatientEligibleTrialListResponse extends ListResponse[RichPatientEligibleTrial] + trait RichPatientHypothesisListResponse extends ListResponse[RichPatientHypothesis] + trait PatientLabelEvidenceViewListResponse extends ListResponse[PatientLabelEvidenceView] + + trait QueueUploadItemListResponse extends ListResponse[BridgeUploadQueue.Item] + +} diff --git a/src/main/scala/xyz/driver/pdsuidomain/fakes/entities/treatmentmatching.scala b/src/main/scala/xyz/driver/pdsuidomain/fakes/entities/treatmentmatching.scala index b0ca136..f8244f8 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/fakes/entities/treatmentmatching.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/fakes/entities/treatmentmatching.scala @@ -3,8 +3,8 @@ package xyz.driver.pdsuidomain.fakes.entities import xyz.driver.entities.labels.Label import xyz.driver.fakes import xyz.driver.pdsuicommon.domain.{LongId, StringId, User} +import xyz.driver.pdsuidomain.ListResponse import xyz.driver.pdsuidomain.entities._ -import xyz.driver.pdsuidomain.formats.json.sprayformats.ListResponse import xyz.driver.pdsuidomain.services.PatientCriterionService.{DraftPatientCriterion, RichPatientCriterion} import xyz.driver.pdsuidomain.services.PatientEligibleTrialService.RichPatientEligibleTrial import xyz.driver.pdsuidomain.services.PatientHypothesisService.RichPatientHypothesis @@ -168,7 +168,7 @@ object treatmentmatching { def nextPatientListResponse(): ListResponse[Patient] = { val xs: Seq[Patient] = Seq.fill(3)(nextPatient()) val pageSize = generators.nextInt(xs.size, 1) - ListResponse( + new ListResponse[Patient]( items = xs, meta = ListResponse.Meta( itemsCount = xs.size, @@ -182,7 +182,7 @@ object treatmentmatching { def nextRichPatientLabelListResponse(): ListResponse[RichPatientLabel] = { val xs: Seq[RichPatientLabel] = Seq.fill(3)(nextRichPatientLabel()) val pageSize = generators.nextInt(xs.size, 1) - ListResponse( + new ListResponse[RichPatientLabel]( items = xs, meta = ListResponse.Meta( itemsCount = xs.size, @@ -196,7 +196,7 @@ object treatmentmatching { def nextPatientLabelListResponse(): ListResponse[PatientLabel] = { val xs: Seq[PatientLabel] = Seq.fill(3)(nextPatientLabel()) val pageSize = generators.nextInt(xs.size, 1) - ListResponse( + new ListResponse[PatientLabel]( items = xs, meta = ListResponse.Meta( itemsCount = xs.size, @@ -210,7 +210,7 @@ object treatmentmatching { def nextRichPatientCriterionListResponse(): ListResponse[RichPatientCriterion] = { val xs: Seq[RichPatientCriterion] = Seq.fill(3)(nextRichPatientCriterion()) val pageSize = generators.nextInt(xs.size, 1) - ListResponse( + new ListResponse[RichPatientCriterion]( items = xs, meta = ListResponse.Meta( itemsCount = xs.size, @@ -224,7 +224,7 @@ object treatmentmatching { def nextRichPatientEligibleTrialListResponse(): ListResponse[RichPatientEligibleTrial] = { val xs: Seq[RichPatientEligibleTrial] = Seq.fill(3)(nextRichPatientEligibleTrial()) val pageSize = generators.nextInt(xs.size, 1) - ListResponse( + new ListResponse[RichPatientEligibleTrial]( items = xs, meta = ListResponse.Meta( itemsCount = xs.size, @@ -238,7 +238,7 @@ object treatmentmatching { def nextRichPatientHypothesisListResponse(): ListResponse[RichPatientHypothesis] = { val xs: Seq[RichPatientHypothesis] = Seq.fill(3)(nextRichPatientHypothesis()) val pageSize = generators.nextInt(xs.size, 1) - ListResponse( + new ListResponse[RichPatientHypothesis]( items = xs, meta = ListResponse.Meta( itemsCount = xs.size, @@ -252,7 +252,7 @@ object treatmentmatching { def nextPatientLabelEvidenceViewListResponse(): ListResponse[PatientLabelEvidenceView] = { val xs: Seq[PatientLabelEvidenceView] = Seq.fill(3)(nextPatientLabelEvidenceView()) val pageSize = generators.nextInt(xs.size, 1) - ListResponse( + new ListResponse[PatientLabelEvidenceView]( items = xs, meta = ListResponse.Meta( itemsCount = xs.size, @@ -266,7 +266,7 @@ object treatmentmatching { def nextPatientIssuesListResponse(): ListResponse[PatientIssue] = { val xs: Seq[PatientIssue] = Seq.fill(3)(nextPatientIssue()) val pageSize = generators.nextInt(xs.size, 1) - ListResponse( + new ListResponse[PatientIssue]( items = xs, meta = ListResponse.Meta( itemsCount = xs.size, @@ -280,7 +280,7 @@ object treatmentmatching { def nextPatientHistoryListResponse(): ListResponse[PatientHistory] = { val xs: Seq[PatientHistory] = Seq.fill(3)(nextPatientHistory()) val pageSize = generators.nextInt(xs.size, 1) - ListResponse( + new ListResponse[PatientHistory]( items = xs, meta = ListResponse.Meta( itemsCount = xs.size, 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") - } - } -} 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 new file mode 100644 index 0000000..20644dc --- /dev/null +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/listresponse.scala @@ -0,0 +1,45 @@ +package xyz.driver.pdsuidomain.formats.json.sprayformats + +import spray.json._ +import spray.json.DefaultJsonProtocol._ +import xyz.driver.pdsuidomain.ListResponse +import xyz.driver.pdsuidomain.formats.json.sprayformats.common._ + +object listresponse { + private val itemsField = "items" + private val metaField = "meta" + + implicit val listResponseMetaFormat: RootJsonFormat[ListResponse.Meta] = jsonFormat4(ListResponse.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[ListResponse.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") + } + } +} -- cgit v1.2.3