aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/xyz/driver/pdsuidomain/services/rest
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/scala/xyz/driver/pdsuidomain/services/rest')
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/rest/RestArmService.scala85
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/rest/RestCriterionService.scala88
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/rest/RestDocumentService.scala121
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/rest/RestDocumentTypeService.scala33
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/rest/RestEligibilitySnapshotService.scala34
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/rest/RestEligibilityVerificationService.scala53
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/rest/RestExtractedDataService.scala100
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/rest/RestHelper.scala107
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/rest/RestHypothesisService.scala60
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/rest/RestInterventionService.scala88
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/rest/RestInterventionTypeService.scala37
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/rest/RestMedicalRecordService.scala129
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/rest/RestPatientCriterionService.scala81
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/rest/RestPatientLabelService.scala84
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/rest/RestPatientService.scala78
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/rest/RestProviderTypeService.scala34
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/rest/RestStudyDesignService.scala34
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/rest/RestTrialIssueService.scala103
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/rest/RestTrialService.scala173
19 files changed, 0 insertions, 1522 deletions
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestArmService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestArmService.scala
deleted file mode 100644
index 87e2bab..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestArmService.scala
+++ /dev/null
@@ -1,85 +0,0 @@
-package xyz.driver.pdsuidomain.services.rest
-
-import scala.concurrent.{ExecutionContext, Future}
-import akka.http.scaladsl.marshalling.Marshal
-import akka.http.scaladsl.model._
-import akka.stream.Materializer
-import xyz.driver.core.rest.{Pagination => _, _}
-import xyz.driver.entities.users.AuthUserInfo
-import xyz.driver.pdsuicommon.db._
-import xyz.driver.pdsuicommon.domain._
-import xyz.driver.pdsuidomain.ListResponse
-import xyz.driver.pdsuidomain.entities._
-import xyz.driver.pdsuidomain.services.ArmService
-
-class RestArmService(transport: ServiceTransport, baseUri: Uri)(implicit protected val materializer: Materializer,
- protected val exec: ExecutionContext)
- extends ArmService with RestHelper {
-
- import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._
- import xyz.driver.pdsuidomain.formats.json.listresponse._
- import xyz.driver.pdsuidomain.formats.json.arm._
- import xyz.driver.pdsuidomain.services.ArmService._
-
- def getAll(filter: SearchFilterExpr = SearchFilterExpr.Empty,
- sorting: Option[Sorting] = None,
- pagination: Option[Pagination] = None)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetListReply] = {
- val request = HttpRequest(
- HttpMethods.GET,
- endpointUri(baseUri, "/v1/arm", filterQuery(filter) ++ sortingQuery(sorting) ++ paginationQuery(pagination)))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ListResponse[Arm]](response)
- } yield {
- GetListReply.EntityList(reply.items, reply.meta.itemsCount)
- }
- }
-
- def getById(armId: LongId[Arm])(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetByIdReply] = {
- val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/arm/$armId"))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[Arm](response)
- } yield {
- GetByIdReply.Entity(reply)
- }
- }
-
- def create(draftArm: Arm)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[CreateReply] = {
- for {
- entity <- Marshal(draftArm).to[RequestEntity]
- request = HttpRequest(HttpMethods.POST, endpointUri(baseUri, "/v1/arm")).withEntity(entity)
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[Arm](response)
- } yield {
- CreateReply.Created(reply)
- }
- }
-
- def update(origArm: Arm, draftArm: Arm)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] = {
- val id = origArm.id
- val request = HttpRequest(HttpMethods.PATCH, endpointUri(baseUri, s"/v1/arm/$id"))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[Arm](response)
- } yield {
- UpdateReply.Updated(reply)
- }
- }
-
- def delete(id: LongId[Arm])(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[DeleteReply] = {
- val request = HttpRequest(HttpMethods.DELETE, endpointUri(baseUri, s"/v1/arm/$id"))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- _ <- apiResponse[HttpEntity](response)
- } yield {
- DeleteReply.Deleted
- }
- }
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestCriterionService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestCriterionService.scala
deleted file mode 100644
index 33be27e..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestCriterionService.scala
+++ /dev/null
@@ -1,88 +0,0 @@
-package xyz.driver.pdsuidomain.services.rest
-
-import scala.concurrent.{ExecutionContext, Future}
-import akka.http.scaladsl.marshalling.Marshal
-import akka.http.scaladsl.model._
-import akka.stream.Materializer
-import xyz.driver.core.rest.{Pagination => _, _}
-import xyz.driver.entities.users.AuthUserInfo
-import xyz.driver.pdsuicommon.db._
-import xyz.driver.pdsuicommon.domain._
-import xyz.driver.pdsuidomain.ListResponse
-import xyz.driver.pdsuidomain.entities._
-import xyz.driver.pdsuidomain.services.CriterionService
-
-class RestCriterionService(transport: ServiceTransport, baseUri: Uri)(
- implicit protected val materializer: Materializer,
- protected val exec: ExecutionContext)
- extends CriterionService with RestHelper {
-
- import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._
- import xyz.driver.pdsuidomain.formats.json.listresponse._
- import xyz.driver.pdsuidomain.formats.json.criterion._
- import xyz.driver.pdsuidomain.services.CriterionService._
-
- def create(draftRichCriterion: RichCriterion)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[CreateReply] = {
- for {
- entity <- Marshal(draftRichCriterion).to[RequestEntity]
- request = HttpRequest(HttpMethods.POST, endpointUri(baseUri, "/v1/criterion")).withEntity(entity)
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[RichCriterion](response)
- } yield {
- CreateReply.Created(reply)
- }
- }
-
- def getById(id: LongId[Criterion])(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetByIdReply] = {
- val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/criterion/$id"))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[RichCriterion](response)
- } yield {
- GetByIdReply.Entity(reply)
- }
- }
-
- def getAll(filter: SearchFilterExpr = SearchFilterExpr.Empty,
- sorting: Option[Sorting] = None,
- pagination: Option[Pagination] = None)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetListReply] = {
- val request = HttpRequest(HttpMethods.GET,
- endpointUri(baseUri,
- s"/v1/criterion",
- filterQuery(filter) ++ sortingQuery(sorting) ++ paginationQuery(pagination)))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ListResponse[RichCriterion]](response)
- } yield {
- GetListReply.EntityList(reply.items, reply.meta.itemsCount, reply.meta.lastUpdate)
- }
- }
-
- def update(origRichCriterion: RichCriterion, draftRichCriterion: RichCriterion)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] = {
- val id = origRichCriterion.criterion.id
- for {
- entity <- Marshal(draftRichCriterion).to[RequestEntity]
- request = HttpRequest(HttpMethods.PATCH, endpointUri(baseUri, s"/v1/criterion/$id")).withEntity(entity)
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[RichCriterion](response)
- } yield {
- UpdateReply.Updated(reply)
- }
- }
-
- def delete(id: LongId[Criterion])(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[DeleteReply] = {
- val request = HttpRequest(HttpMethods.DELETE, endpointUri(baseUri, s"/v1/criterion/$id"))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- _ <- apiResponse[HttpEntity](response)
- } yield {
- DeleteReply.Deleted
- }
- }
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestDocumentService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestDocumentService.scala
deleted file mode 100644
index bfe5e8f..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestDocumentService.scala
+++ /dev/null
@@ -1,121 +0,0 @@
-package xyz.driver.pdsuidomain.services.rest
-
-import scala.concurrent.{ExecutionContext, Future}
-import akka.http.scaladsl.marshalling.Marshal
-import akka.http.scaladsl.model._
-import akka.stream.Materializer
-import xyz.driver.core.rest.{Pagination => _, _}
-import xyz.driver.entities.users.AuthUserInfo
-import xyz.driver.pdsuicommon.db._
-import xyz.driver.pdsuicommon.domain._
-import xyz.driver.pdsuidomain.ListResponse
-import xyz.driver.pdsuidomain.entities._
-import xyz.driver.pdsuidomain.services.DocumentService
-
-class RestDocumentService(transport: ServiceTransport, baseUri: Uri)(implicit protected val materializer: Materializer,
- protected val exec: ExecutionContext)
- extends DocumentService with RestHelper {
-
- import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._
- import xyz.driver.pdsuidomain.formats.json.listresponse._
- import xyz.driver.pdsuidomain.formats.json.document._
- import xyz.driver.pdsuidomain.services.DocumentService._
-
- def getById(id: LongId[Document])(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetByIdReply] = {
- val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/document/$id"))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[Document](response)
- } yield {
- GetByIdReply.Entity(reply)
- }
- }
-
- def getAll(filter: SearchFilterExpr = SearchFilterExpr.Empty,
- sorting: Option[Sorting] = None,
- pagination: Option[Pagination] = None)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetListReply] = {
-
- val request = HttpRequest(HttpMethods.GET,
- endpointUri(baseUri,
- "/v1/document",
- filterQuery(filter) ++ sortingQuery(sorting) ++ paginationQuery(pagination)))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ListResponse[Document]](response)
- } yield {
- GetListReply.EntityList(reply.items, reply.meta.itemsCount, reply.meta.lastUpdate)
- }
- }
-
- def create(draftDocument: Document)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[CreateReply] = {
- for {
- entity <- Marshal(draftDocument).to[RequestEntity]
- request = HttpRequest(HttpMethods.POST, endpointUri(baseUri, "/v1/document")).withEntity(entity)
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[Document](response)
- } yield {
- CreateReply.Created(reply)
- }
- }
-
- def update(orig: Document, draft: Document)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] = {
- for {
- entity <- Marshal(draft).to[RequestEntity]
- request = HttpRequest(HttpMethods.PATCH, endpointUri(baseUri, s"/v1/document/${orig.id}")).withEntity(entity)
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[Document](response)
- } yield {
- UpdateReply.Updated(reply)
- }
- }
-
- def delete(id: LongId[Document])(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[DeleteReply] = {
- val request = HttpRequest(HttpMethods.DELETE, endpointUri(baseUri, s"/v1/document/$id"))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- _ <- apiResponse[HttpEntity](response)
- } yield {
- DeleteReply.Deleted
- }
- }
-
- private def editAction(orig: Document, action: String)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] = {
- val id = orig.id.toString
- val request = HttpRequest(HttpMethods.POST, endpointUri(baseUri, s"/v1/document/$id/$action"))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[Document](response)
- } yield {
- UpdateReply.Updated(reply)
- }
- }
-
- def start(orig: Document)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] =
- editAction(orig, "start")
- def submit(orig: Document)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] =
- editAction(orig, "submit")
- def restart(orig: Document)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] =
- editAction(orig, "restart")
- def flag(orig: Document)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] =
- editAction(orig, "flag")
- def resolve(orig: Document)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] =
- editAction(orig, "resolve")
- def unassign(orig: Document)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] =
- editAction(orig, "unassign")
- def archive(orig: Document)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] =
- editAction(orig, "archive")
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestDocumentTypeService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestDocumentTypeService.scala
deleted file mode 100644
index 6157cc3..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestDocumentTypeService.scala
+++ /dev/null
@@ -1,33 +0,0 @@
-package xyz.driver.pdsuidomain.services.rest
-
-import scala.concurrent.{ExecutionContext, Future}
-import akka.http.scaladsl.model._
-import akka.stream.Materializer
-import xyz.driver.core.rest.{Pagination => _, _}
-import xyz.driver.entities.users.AuthUserInfo
-import xyz.driver.pdsuicommon.db._
-import xyz.driver.pdsuidomain.ListResponse
-import xyz.driver.pdsuidomain.entities.DocumentType
-import xyz.driver.pdsuidomain.services.DocumentTypeService
-
-class RestDocumentTypeService(transport: ServiceTransport, baseUri: Uri)(
- implicit protected val materializer: Materializer,
- protected val exec: ExecutionContext)
- extends DocumentTypeService with RestHelper {
-
- import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._
- import xyz.driver.pdsuidomain.formats.json.listresponse._
- import xyz.driver.pdsuidomain.formats.json.document.documentTypeFormat
- import xyz.driver.pdsuidomain.services.DocumentTypeService._
-
- def getAll(sorting: Option[Sorting] = None)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetListReply] = {
- val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, "/v1/document-type", sortingQuery(sorting)))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ListResponse[DocumentType]](response)
- } yield {
- GetListReply.EntityList(reply.items, reply.meta.itemsCount)
- }
- }
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestEligibilitySnapshotService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestEligibilitySnapshotService.scala
deleted file mode 100644
index 2187ec2..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestEligibilitySnapshotService.scala
+++ /dev/null
@@ -1,34 +0,0 @@
-package xyz.driver.pdsuidomain.services.rest
-
-import akka.http.scaladsl.model.{HttpMethods, HttpRequest, Uri}
-import akka.stream.Materializer
-import xyz.driver.core.rest.{AuthorizedServiceRequestContext, ServiceTransport}
-import xyz.driver.entities.users.AuthUserInfo
-import xyz.driver.pdsuicommon.domain.UuidId
-import xyz.driver.pdsuidomain.entities.eligibility.EligibleTrial
-import xyz.driver.pdsuidomain.entities.{Patient, eligibility}
-import xyz.driver.pdsuidomain.services.EligibilitySnapshotService
-
-import scala.concurrent.{ExecutionContext, Future}
-
-class RestEligibilitySnapshotService(transport: ServiceTransport, baseUrl: Uri)(
- implicit protected val materializer: Materializer,
- protected val exec: ExecutionContext) extends EligibilitySnapshotService with RestHelper {
-
- import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._
- import spray.json.DefaultJsonProtocol._
- import xyz.driver.pdsuidomain.formats.json.eligibility._
-
- override def eligibilitySnapshot(patientId: UuidId[Patient])
- (implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]):
- Future[Seq[eligibility.EligibleTrial]] = {
- val request = HttpRequest(HttpMethods.GET, endpointUri(baseUrl, s"/v1/patient/$patientId/eligibilitySnapshot"))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[Seq[EligibleTrial]](response)
- } yield {
- reply
- }
- }
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestEligibilityVerificationService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestEligibilityVerificationService.scala
deleted file mode 100644
index e057c55..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestEligibilityVerificationService.scala
+++ /dev/null
@@ -1,53 +0,0 @@
-package xyz.driver.pdsuidomain.services.rest
-
-import akka.http.scaladsl.model.Uri
-import akka.stream.Materializer
-import spray.json.DefaultJsonProtocol
-import xyz.driver.core.Id
-import xyz.driver.core.rest.{AuthorizedServiceRequestContext, RestService, ServiceTransport}
-import xyz.driver.entities.patient
-import xyz.driver.entities.patient.Patient
-import xyz.driver.entities.users.AuthUserInfo
-import xyz.driver.pdsuicommon.domain.LongId
-import xyz.driver.pdsuidomain.entities.eligibility.{MatchedPatient, MismatchRankedLabels}
-import xyz.driver.pdsuidomain.entities.{EligibilityArm, eligibility}
-import xyz.driver.pdsuidomain.services.EligibilityVerificationService
-
-import scala.concurrent.{ExecutionContext, Future}
-import scalaz.ListT
-import scalaz.Scalaz.futureInstance
-
-class RestEligibilityVerificationService(transport: ServiceTransport, baseUri: Uri)(
- implicit protected val materializer: Materializer,
- protected val exec: ExecutionContext
-) extends EligibilityVerificationService with RestService {
-
- import DefaultJsonProtocol._
- import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._
- import xyz.driver.pdsuidomain.formats.json.eligibility._
-
- override def getMatchedPatients()(
- implicit ctx: AuthorizedServiceRequestContext[AuthUserInfo]): ListT[Future, eligibility.MatchedPatient] = {
- val request = get(baseUri, s"/v1/patients")
- listResponse[MatchedPatient](transport.sendRequest(ctx)(request))
- }
-
- override def getMismatchRankedLabels(patientId: Id[Patient],
- cancerType: patient.CancerType,
- excludedArms: Seq[LongId[EligibilityArm]])(
- implicit ctx: AuthorizedServiceRequestContext[AuthUserInfo]): Future[eligibility.MismatchRankedLabels] = {
-
- val query = Seq("disease" -> cancerType.toString.toUpperCase) ++ (if (excludedArms.nonEmpty) {
- Seq(
- "ineligible_arms" -> excludedArms
- .map(_.id)
- .mkString(","))
- } else {
- Seq.empty[(String, String)]
- })
-
- val request = get(baseUri, s"/v1/patients/$patientId/labels", query)
- optionalResponse[MismatchRankedLabels](transport.sendRequest(ctx)(request))
- .getOrElse(throw new Exception(s"The data of patient $patientId is not ready yet"))
- }
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestExtractedDataService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestExtractedDataService.scala
deleted file mode 100644
index 24c5436..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestExtractedDataService.scala
+++ /dev/null
@@ -1,100 +0,0 @@
-package xyz.driver.pdsuidomain.services.rest
-
-import scala.concurrent.{ExecutionContext, Future}
-import akka.http.scaladsl.marshalling.Marshal
-import akka.http.scaladsl.model._
-import akka.stream.Materializer
-import xyz.driver.core.rest.{Pagination => _, _}
-import xyz.driver.pdsuicommon.db._
-import xyz.driver.pdsuicommon.domain._
-import xyz.driver.pdsuidomain.entities._
-import xyz.driver.pdsuidomain.entities.export.patient.ExportPatientWithLabels
-import xyz.driver.pdsuidomain.services.ExtractedDataService
-import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._
-import xyz.driver.entities.users.AuthUserInfo
-import xyz.driver.pdsuidomain.ListResponse
-import xyz.driver.pdsuidomain.formats.json.export._
-
-class RestExtractedDataService(transport: ServiceTransport, baseUri: Uri)(
- implicit protected val materializer: Materializer,
- protected val exec: ExecutionContext)
- extends ExtractedDataService with RestHelper {
-
- import xyz.driver.pdsuidomain.formats.json.listresponse._
- import xyz.driver.pdsuidomain.formats.json.extracteddata._
- import xyz.driver.pdsuidomain.services.ExtractedDataService._
-
- def getById(id: LongId[ExtractedData])(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetByIdReply] = {
- val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/extracted-data/$id"))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[RichExtractedData](response)
- } yield {
- GetByIdReply.Entity(reply)
- }
- }
-
- def getAll(filter: SearchFilterExpr = SearchFilterExpr.Empty,
- sorting: Option[Sorting] = None,
- pagination: Option[Pagination] = None)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetListReply] = {
- val request = HttpRequest(HttpMethods.GET,
- endpointUri(baseUri,
- "/v1/extracted-data",
- filterQuery(filter) ++ sortingQuery(sorting) ++ paginationQuery(pagination)))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ListResponse[RichExtractedData]](response)
- } yield {
- GetListReply.EntityList(reply.items, reply.meta.itemsCount)
- }
- }
-
- def create(draftRichExtractedData: RichExtractedData)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[CreateReply] = {
- for {
- entity <- Marshal(draftRichExtractedData).to[RequestEntity]
- request = HttpRequest(HttpMethods.POST, endpointUri(baseUri, "/v1/extracted-data")).withEntity(entity)
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[RichExtractedData](response)
- } yield {
- CreateReply.Created(reply)
- }
- }
- def update(origRichExtractedData: RichExtractedData, draftRichExtractedData: RichExtractedData)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] = {
- val id = origRichExtractedData.extractedData.id
- for {
- entity <- Marshal(draftRichExtractedData).to[RequestEntity]
- request = HttpRequest(HttpMethods.PATCH, endpointUri(baseUri, s"/v1/extracted-data/$id")).withEntity(entity)
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[RichExtractedData](response)
- } yield {
- UpdateReply.Updated(reply)
- }
- }
-
- def delete(id: LongId[ExtractedData])(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[DeleteReply] = {
- val request = HttpRequest(HttpMethods.DELETE, endpointUri(baseUri, s"/v1/export-data/$id"))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- _ <- apiResponse[HttpEntity](response)
- } yield {
- DeleteReply.Deleted
- }
- }
-
- def getPatientLabels(id: UuidId[Patient])(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetPatientLabelsReply] = {
- val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/export/patient/$id"))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ExportPatientWithLabels](response)
- } yield {
- GetPatientLabelsReply.Entity(reply)
- }
- }
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestHelper.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestHelper.scala
deleted file mode 100644
index 8ed2651..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestHelper.scala
+++ /dev/null
@@ -1,107 +0,0 @@
-package xyz.driver.pdsuidomain.services.rest
-
-import scala.concurrent.{ExecutionContext, Future}
-import akka.http.scaladsl.model.{HttpResponse, ResponseEntity, StatusCodes, Uri}
-import akka.http.scaladsl.unmarshalling.{Unmarshal, Unmarshaller}
-import akka.stream.Materializer
-import xyz.driver.core.rest.errors.{InvalidActionException, InvalidInputException, ResourceNotFoundException}
-import xyz.driver.pdsuicommon.db.{Pagination, SearchFilterBinaryOperation, SearchFilterExpr, SearchFilterNAryOperation, Sorting, SortingOrder}
-import xyz.driver.pdsuicommon.error._
-
-trait RestHelper {
- import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._
- import ErrorsResponse._
-
- implicit protected val materializer: Materializer
- implicit protected val exec: ExecutionContext
-
- protected def endpointUri(baseUri: Uri, path: String) =
- baseUri.withPath(Uri.Path(path))
-
- protected def endpointUri(baseUri: Uri, path: String, query: Seq[(String, String)]) =
- baseUri.withPath(Uri.Path(path)).withQuery(Uri.Query(query: _*))
-
- def sortingQuery(sorting: Option[Sorting]): Seq[(String, String)] = {
- def dimensionQuery(dimension: Sorting.Dimension) = {
- val ord = dimension.order match {
- case SortingOrder.Ascending => ""
- case SortingOrder.Descending => "-"
- }
- s"$ord${dimension.name}"
- }
-
- sorting match {
- case None => Seq.empty
- case Some(dimension: Sorting.Dimension) => Seq("sort" -> dimensionQuery(dimension))
- case Some(Sorting.Sequential(dimensions)) => Seq("sort" -> dimensions.map(dimensionQuery).mkString(","))
- }
- }
-
- def filterQuery(expr: SearchFilterExpr): Seq[(String, String)] = {
- def opToString(op: SearchFilterBinaryOperation) = op match {
- case SearchFilterBinaryOperation.Eq => "eq"
- case SearchFilterBinaryOperation.NotEq => "ne"
- case SearchFilterBinaryOperation.Like => "like"
- case SearchFilterBinaryOperation.Gt => "gt"
- case SearchFilterBinaryOperation.GtEq => "ge"
- case SearchFilterBinaryOperation.Lt => "lt"
- case SearchFilterBinaryOperation.LtEq => "le"
- }
-
- def exprToQuery(expr: SearchFilterExpr): Seq[(String, String)] = expr match {
- case SearchFilterExpr.Empty => Seq.empty
- case SearchFilterExpr.Atom.Binary(dimension, op, value) =>
- Seq("filters" -> s"${dimension.tableName.fold("")(t => s"$t.") + dimension.name} ${opToString(op)} $value")
- case SearchFilterExpr.Atom.NAry(dimension, SearchFilterNAryOperation.In, values) =>
- Seq("filters" -> s"${dimension.tableName.fold("")(t => s"$t.") + dimension.name} in ${values.mkString(",")}")
- case SearchFilterExpr.Intersection(ops) =>
- ops.flatMap(op => exprToQuery(op))
- case expr => sys.error(s"No parser available for filter expression $expr.")
- }
-
- exprToQuery(expr)
- }
-
- def paginationQuery(pagination: Option[Pagination]): Seq[(String, String)] = pagination match {
- case None => Seq.empty
- case Some(pp) =>
- Seq(
- "pageNumber" -> pp.pageNumber.toString,
- "pageSize" -> pp.pageSize.toString
- )
- }
-
- /** Utility method to parse responses from records-acquisition-server.
- *
- * Non-2xx HTTP error codes will be cause the returned future to fail with a corresponding
- * `DomainException`.
- * @tparam ApiReply The type of the serialized reply object, contained in the HTTP entity
- * @param response The HTTP response to parse.
- * @param unmarshaller An unmarshaller that converts a successful response to an api reply.
- */
- def apiResponse[ApiReply](response: HttpResponse)(
- implicit unmarshaller: Unmarshaller[ResponseEntity, ApiReply]): Future[ApiReply] = {
-
- def extractErrorMessage(response: HttpResponse): Future[String] = {
- Unmarshal(response.entity)
- .to[ErrorsResponse]
- .transform(
- response => response.errors.map(_.message).mkString(", "),
- ex => InvalidInputException(s"Response has invalid format: ${ex.getMessage}")
- )
- }
-
- if (response.status.isSuccess) {
- Unmarshal(response.entity).to[ApiReply]
- } else {
- extractErrorMessage(response).flatMap { message =>
- Future.failed(response.status match {
- case StatusCodes.Forbidden => InvalidActionException(message)
- case StatusCodes.NotFound => ResourceNotFoundException(message)
- case other =>
- InvalidInputException(s"Unhandled domain error for HTTP status ${other.value}. $message")
- })
- }
- }
- }
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestHypothesisService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestHypothesisService.scala
deleted file mode 100644
index 11adb8f..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestHypothesisService.scala
+++ /dev/null
@@ -1,60 +0,0 @@
-package xyz.driver.pdsuidomain.services.rest
-
-import akka.http.scaladsl.marshalling.Marshal
-
-import scala.concurrent.{ExecutionContext, Future}
-import akka.http.scaladsl.model._
-import akka.stream.Materializer
-import xyz.driver.core.rest._
-import xyz.driver.entities.users.AuthUserInfo
-import xyz.driver.pdsuicommon.db._
-import xyz.driver.pdsuicommon.domain.UuidId
-import xyz.driver.pdsuidomain.ListResponse
-import xyz.driver.pdsuidomain.entities.Hypothesis
-import xyz.driver.pdsuidomain.services.HypothesisService
-
-class RestHypothesisService(transport: ServiceTransport, baseUri: Uri)(
- implicit protected val materializer: Materializer,
- protected val exec: ExecutionContext)
- extends HypothesisService with RestHelper {
-
- import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._
- import xyz.driver.pdsuidomain.formats.json.listresponse._
- import xyz.driver.pdsuidomain.formats.json.hypothesis._
- import xyz.driver.pdsuidomain.services.HypothesisService._
-
- def getAll(sorting: Option[Sorting] = None)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetListReply] = {
- val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, "/v1/hypothesis", sortingQuery(sorting)))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ListResponse[Hypothesis]](response)
- } yield {
- GetListReply.EntityList(reply.items, reply.meta.itemsCount)
- }
- }
-
- def create(draftHypothesis: Hypothesis)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[CreateReply] = {
- for {
- entity <- Marshal(draftHypothesis).to[RequestEntity]
- request = HttpRequest(HttpMethods.POST, endpointUri(baseUri, "/v1/hypothesis")).withEntity(entity)
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[Hypothesis](response)
- } yield {
- CreateReply.Created(reply)
- }
- }
-
- def delete(id: UuidId[Hypothesis])(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[DeleteReply] = {
- val request = HttpRequest(HttpMethods.DELETE, endpointUri(baseUri, s"/v1/hypothesis/$id"))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- _ <- apiResponse[HttpEntity](response)
- } yield {
- DeleteReply.Deleted
- }
- }
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestInterventionService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestInterventionService.scala
deleted file mode 100644
index c4add4a..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestInterventionService.scala
+++ /dev/null
@@ -1,88 +0,0 @@
-package xyz.driver.pdsuidomain.services.rest
-
-import scala.concurrent.{ExecutionContext, Future}
-import akka.http.scaladsl.marshalling.Marshal
-import akka.http.scaladsl.model._
-import akka.stream.Materializer
-import xyz.driver.core.rest.{Pagination => _, _}
-import xyz.driver.entities.users.AuthUserInfo
-import xyz.driver.pdsuicommon.db._
-import xyz.driver.pdsuicommon.domain._
-import xyz.driver.pdsuidomain.ListResponse
-import xyz.driver.pdsuidomain.entities._
-import xyz.driver.pdsuidomain.services.InterventionService
-
-class RestInterventionService(transport: ServiceTransport, baseUri: Uri)(
- implicit protected val materializer: Materializer,
- protected val exec: ExecutionContext)
- extends InterventionService with RestHelper {
-
- import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._
- import xyz.driver.pdsuidomain.formats.json.listresponse._
- import xyz.driver.pdsuidomain.formats.json.intervention._
- import xyz.driver.pdsuidomain.services.InterventionService._
-
- def getAll(filter: SearchFilterExpr = SearchFilterExpr.Empty,
- sorting: Option[Sorting] = None,
- pagination: Option[Pagination] = None)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetListReply] = {
- val request = HttpRequest(HttpMethods.GET,
- endpointUri(baseUri,
- "/v1/intervention",
- filterQuery(filter) ++ sortingQuery(sorting) ++ paginationQuery(pagination)))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ListResponse[InterventionWithArms]](response)
- } yield {
- GetListReply.EntityList(reply.items, reply.meta.itemsCount)
- }
- }
-
- def getById(id: LongId[Intervention])(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetByIdReply] = {
- val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/intervention/$id"))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[InterventionWithArms](response)
- } yield {
- GetByIdReply.Entity(reply)
- }
- }
-
- def update(origIntervention: InterventionWithArms, draftIntervention: InterventionWithArms)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] = {
- val id = origIntervention.intervention.id
- for {
- entity <- Marshal(draftIntervention).to[RequestEntity]
- request = HttpRequest(HttpMethods.PATCH, endpointUri(baseUri, s"/v1/intervention/$id")).withEntity(entity)
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[InterventionWithArms](response)
- } yield {
- UpdateReply.Updated(reply)
- }
- }
-
- def create(draftIntervention: InterventionWithArms)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[CreateReply] = {
- for {
- entity <- Marshal(draftIntervention).to[RequestEntity]
- request = HttpRequest(HttpMethods.POST, endpointUri(baseUri, "/v1/intervention")).withEntity(entity)
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[InterventionWithArms](response)
- } yield {
- CreateReply.Created(reply)
- }
- }
-
- def delete(id: LongId[Intervention])(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[DeleteReply] = {
- val request = HttpRequest(HttpMethods.DELETE, endpointUri(baseUri, s"/v1/intervention/$id"))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- _ <- apiResponse[HttpEntity](response)
- } yield {
- DeleteReply.Deleted
- }
- }
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestInterventionTypeService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestInterventionTypeService.scala
deleted file mode 100644
index 825b936..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestInterventionTypeService.scala
+++ /dev/null
@@ -1,37 +0,0 @@
-package xyz.driver.pdsuidomain.services.rest
-
-import scala.concurrent.{ExecutionContext, Future}
-import akka.http.scaladsl.model._
-import akka.stream.Materializer
-import xyz.driver.core.rest._
-import xyz.driver.entities.users.AuthUserInfo
-import xyz.driver.pdsuicommon.db._
-import xyz.driver.pdsuidomain.ListResponse
-import xyz.driver.pdsuidomain.entities.InterventionType
-import xyz.driver.pdsuidomain.services.InterventionTypeService
-
-class RestInterventionTypeService(transport: ServiceTransport, baseUri: Uri)(
- implicit protected val materializer: Materializer,
- protected val exec: ExecutionContext)
- extends InterventionTypeService with RestHelper {
-
- import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._
- import xyz.driver.pdsuidomain.formats.json.listresponse._
- import xyz.driver.pdsuidomain.formats.json.intervention.interventionTypeFormat
- import xyz.driver.pdsuidomain.services.InterventionTypeService._
-
- def getAll(sorting: Option[Sorting] = None)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetListReply] = {
- val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, "/v1/intervention-type", sortingQuery(sorting)))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ListResponse[InterventionType]](response)
- } yield {
- {
- val domain = reply.items
- GetListReply.EntityList(domain.toList, reply.meta.itemsCount)
- }
- }
- }
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestMedicalRecordService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestMedicalRecordService.scala
deleted file mode 100644
index 6af6707..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestMedicalRecordService.scala
+++ /dev/null
@@ -1,129 +0,0 @@
-package xyz.driver.pdsuidomain.services.rest
-
-import akka.NotUsed
-import akka.stream.scaladsl.Source
-import akka.util.ByteString
-
-import scala.concurrent.{ExecutionContext, Future}
-import akka.http.scaladsl.marshalling.Marshal
-import akka.http.scaladsl.model._
-import akka.stream.Materializer
-import xyz.driver.core.rest.{Pagination => _, _}
-import xyz.driver.entities.users.AuthUserInfo
-import xyz.driver.pdsuicommon.db._
-import xyz.driver.pdsuicommon.domain._
-import xyz.driver.pdsuidomain.ListResponse
-import xyz.driver.pdsuidomain.entities._
-import xyz.driver.pdsuidomain.services.MedicalRecordService
-
-class RestMedicalRecordService(transport: ServiceTransport, baseUri: Uri)(
- implicit protected val materializer: Materializer,
- protected val exec: ExecutionContext)
- extends MedicalRecordService with RestHelper {
-
- import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._
- import xyz.driver.pdsuidomain.formats.json.listresponse._
- import xyz.driver.pdsuidomain.formats.json.record._
- import xyz.driver.pdsuidomain.services.MedicalRecordService._
-
- def getById(recordId: LongId[MedicalRecord])(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetByIdReply] = {
- val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/record/$recordId"))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[MedicalRecord](response)
- } yield {
- GetByIdReply.Entity(reply)
- }
- }
-
- def getPdfSource(recordId: LongId[MedicalRecord])(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]
- ): Future[Source[ByteString, NotUsed]] = {
-
- val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/record/$recordId/source"))
-
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[HttpEntity](response)
- } yield {
- reply.dataBytes.mapMaterializedValue(_ => NotUsed)
- }
- }
-
- def getAll(filter: SearchFilterExpr = SearchFilterExpr.Empty,
- sorting: Option[Sorting] = None,
- pagination: Option[Pagination] = None)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetListReply] = {
-
- val request = HttpRequest(
- HttpMethods.GET,
- endpointUri(baseUri, "/v1/record", filterQuery(filter) ++ sortingQuery(sorting) ++ paginationQuery(pagination)))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ListResponse[MedicalRecord]](response)
- } yield {
- GetListReply.EntityList(reply.items, reply.meta.itemsCount, reply.meta.lastUpdate)
- }
- }
-
- def create(draftRecord: MedicalRecord)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[CreateReply] = {
- for {
- entity <- Marshal(draftRecord).to[RequestEntity]
- request = HttpRequest(HttpMethods.POST, endpointUri(baseUri, "/v1/record")).withEntity(entity)
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[MedicalRecord](response)
- } yield {
- CreateReply.Created(reply)
- }
- }
-
- def update(origRecord: MedicalRecord, draftRecord: MedicalRecord)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] = {
- val id = origRecord.id.toString
- for {
- entity <- Marshal(draftRecord).to[RequestEntity]
- request = HttpRequest(HttpMethods.PATCH, endpointUri(baseUri, s"/v1/record/$id")).withEntity(entity)
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[MedicalRecord](response)
- } yield {
- UpdateReply.Updated(reply)
- }
- }
-
- private def editAction(orig: MedicalRecord, action: String)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] = {
- val id = orig.id.toString
- val request = HttpRequest(HttpMethods.POST, endpointUri(baseUri, s"/v1/record/$id/$action"))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[MedicalRecord](response)
- } yield {
- UpdateReply.Updated(reply)
- }
- }
-
- def start(orig: MedicalRecord)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] =
- editAction(orig, "start")
- def submit(orig: MedicalRecord)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] =
- editAction(orig, "submit")
- def restart(orig: MedicalRecord)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] =
- editAction(orig, "restart")
- def flag(orig: MedicalRecord)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] =
- editAction(orig, "flag")
- def resolve(orig: MedicalRecord)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] =
- editAction(orig, "resolve")
- def unassign(orig: MedicalRecord)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] =
- editAction(orig, "unassign")
- def archive(orig: MedicalRecord)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] =
- editAction(orig, "archive")
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestPatientCriterionService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestPatientCriterionService.scala
deleted file mode 100644
index cc66142..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestPatientCriterionService.scala
+++ /dev/null
@@ -1,81 +0,0 @@
-package xyz.driver.pdsuidomain.services.rest
-
-import akka.http.scaladsl.marshalling.Marshal
-import akka.http.scaladsl.model._
-import akka.stream.Materializer
-import xyz.driver.core.rest.{Pagination => _, _}
-import xyz.driver.entities.users.AuthUserInfo
-import xyz.driver.pdsuicommon.db.{Pagination, _}
-import xyz.driver.pdsuicommon.domain._
-import xyz.driver.pdsuidomain.ListResponse
-import xyz.driver.pdsuidomain.entities._
-import xyz.driver.pdsuidomain.services.PatientCriterionService
-
-import scala.concurrent.{ExecutionContext, Future}
-
-class RestPatientCriterionService(transport: ServiceTransport, baseUri: Uri)(
- implicit protected val materializer: Materializer,
- protected val exec: ExecutionContext)
- extends PatientCriterionService with RestHelper {
-
- import spray.json.DefaultJsonProtocol._
- import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._
- import xyz.driver.pdsuidomain.formats.json.patientcriterion._
- import xyz.driver.pdsuidomain.formats.json.listresponse._
-
- def getAll(patientId: UuidId[Patient],
- filter: SearchFilterExpr = SearchFilterExpr.Empty,
- sorting: Option[Sorting] = None,
- pagination: Pagination = Pagination.Default)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[ListResponse[RichPatientCriterion]] = {
- val request = HttpRequest(HttpMethods.GET,
- endpointUri(baseUri,
- s"/v1/patient/$patientId/criterion",
- filterQuery(filter) ++ sortingQuery(sorting) ++ paginationQuery(Some(pagination))))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ListResponse[RichPatientCriterion]](response)
- } yield {
- reply
- }
- }
-
- def getById(patientId: UuidId[Patient], id: LongId[PatientCriterion])(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[Option[RichPatientCriterion]] = {
- val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/patient/$patientId/criterion/$id"))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- entity <- apiResponse[RichPatientCriterion](response)
- } yield {
- Option(entity)
- }
- }
-
- def updateList(patientId: UuidId[Patient], draftEntities: List[DraftPatientCriterion])(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[Unit] = {
- for {
- entity <- Marshal(draftEntities).to[RequestEntity]
- request = HttpRequest(HttpMethods.PATCH, endpointUri(baseUri, s"/v1/patient/$patientId/criterion"))
- .withEntity(entity)
- response <- transport.sendRequestGetResponse(requestContext)(request)
- _ <- apiResponse[RichPatientCriterion](response)
- } yield {
- ()
- }
- }
-
- def update(origEntity: PatientCriterion, draftEntity: PatientCriterion, patientId: UuidId[Patient])(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[RichPatientCriterion] = {
- for {
- entity <- Marshal(draftEntity).to[RequestEntity]
- request = HttpRequest(
- HttpMethods.PATCH,
- endpointUri(baseUri, s"/v1/patient/$patientId/criterion/${origEntity.criterionId}")).withEntity(entity)
- response <- transport.sendRequestGetResponse(requestContext)(request)
- entity <- apiResponse[RichPatientCriterion](response)
- } yield {
- entity
- }
- }
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestPatientLabelService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestPatientLabelService.scala
deleted file mode 100644
index 932e123..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestPatientLabelService.scala
+++ /dev/null
@@ -1,84 +0,0 @@
-package xyz.driver.pdsuidomain.services.rest
-
-import akka.http.scaladsl.marshalling.Marshal
-import akka.http.scaladsl.model._
-import akka.stream.Materializer
-import xyz.driver.core.rest.{Pagination => _, _}
-import xyz.driver.entities.labels.Label
-import xyz.driver.entities.users.AuthUserInfo
-import xyz.driver.pdsuicommon.db.{Pagination, _}
-import xyz.driver.pdsuicommon.domain._
-import xyz.driver.pdsuidomain.ListResponse
-import xyz.driver.pdsuidomain.entities._
-import xyz.driver.pdsuidomain.services.PatientLabelService
-
-import scala.concurrent.{ExecutionContext, Future}
-
-class RestPatientLabelService(transport: ServiceTransport, baseUri: Uri)(
- implicit protected val materializer: Materializer,
- protected val exec: ExecutionContext)
- extends PatientLabelService with RestHelper {
-
- import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._
- import xyz.driver.pdsuidomain.formats.json.listresponse._
- import xyz.driver.pdsuidomain.formats.json.patientlabel._
-
- def getAll(patientId: UuidId[Patient],
- filter: SearchFilterExpr = SearchFilterExpr.Empty,
- sorting: Option[Sorting] = None,
- pagination: Pagination = Pagination.Default)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[ListResponse[RichPatientLabel]] = {
- val request = HttpRequest(HttpMethods.GET,
- endpointUri(baseUri,
- s"/v1/patient/$patientId/label",
- filterQuery(filter) ++ sortingQuery(sorting) ++ paginationQuery(Some(pagination))))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ListResponse[RichPatientLabel]](response)
- } yield {
- reply
- }
- }
-
- def getDefiningCriteriaList(patientId: UuidId[Patient],
- hypothesisId: UuidId[Hypothesis],
- pagination: Pagination = Pagination.Default)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]
- ): Future[ListResponse[PatientLabel]] = {
- val request = HttpRequest(HttpMethods.GET,
- endpointUri(baseUri, s"/patient/$patientId/hypothesis", paginationQuery(Some(pagination))))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ListResponse[PatientLabel]](response)
- } yield {
- reply
- }
- }
-
- def getByLabelIdOfPatient(patientId: UuidId[Patient], labelId: LongId[Label])(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[Option[RichPatientLabel]] = {
- val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/patient/$patientId/label/$labelId"))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- entity <- apiResponse[RichPatientLabel](response)
- } yield {
- Option(entity)
- }
- }
-
- def update(origPatientLabel: PatientLabel, draftPatientLabel: PatientLabel)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[RichPatientLabel] = {
- for {
- entity <- Marshal(draftPatientLabel).to[RequestEntity]
- request = HttpRequest(
- HttpMethods.PATCH,
- endpointUri(baseUri, s"/v1/patient/${origPatientLabel.patientId}/label/${origPatientLabel.labelId}"))
- .withEntity(entity)
- response <- transport.sendRequestGetResponse(requestContext)(request)
- entity <- apiResponse[RichPatientLabel](response)
- } yield {
- entity
- }
- }
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestPatientService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestPatientService.scala
deleted file mode 100644
index 67f4e38..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestPatientService.scala
+++ /dev/null
@@ -1,78 +0,0 @@
-package xyz.driver.pdsuidomain.services.rest
-
-import scala.concurrent.{ExecutionContext, Future}
-import akka.http.scaladsl.model._
-import akka.stream.Materializer
-import xyz.driver.core.rest.{Pagination => _, _}
-import xyz.driver.entities.users.AuthUserInfo
-import xyz.driver.pdsuicommon.db.{Pagination, _}
-import xyz.driver.pdsuicommon.domain._
-import xyz.driver.pdsuidomain.ListResponse
-import xyz.driver.pdsuidomain.entities._
-import xyz.driver.pdsuidomain.services.PatientService
-
-class RestPatientService(transport: ServiceTransport, baseUri: Uri)(implicit protected val materializer: Materializer,
- protected val exec: ExecutionContext)
- extends PatientService with RestHelper {
-
- import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._
- import xyz.driver.pdsuidomain.formats.json.listresponse._
- import xyz.driver.pdsuidomain.formats.json.patient._
-
- def getById(id: UuidId[Patient])(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[Option[Patient]] = {
- val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/patient/$id"))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- entity <- apiResponse[Patient](response)
- } yield {
- Option(entity)
- }
- }
-
- def getAll(filter: SearchFilterExpr = SearchFilterExpr.Empty,
- sorting: Option[Sorting] = None,
- pagination: Pagination = Pagination.Default)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[ListResponse[Patient]] = {
- val request = HttpRequest(
- HttpMethods.GET,
- endpointUri(baseUri, "/v1/patient", filterQuery(filter) ++ sortingQuery(sorting) ++ paginationQuery(Some(pagination))))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ListResponse[Patient]](response)
- } yield {
- reply
- }
- }
-
- private def editAction(orig: Patient, action: String)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[Patient] = {
- val id = orig.id.toString
- val request = HttpRequest(HttpMethods.POST, endpointUri(baseUri, s"/v1/patient/$id/$action"))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- entity <- apiResponse[Patient](response)
- } yield {
- entity
- }
- }
-
- def unassign(origPatient: Patient)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[Patient] =
- editAction(origPatient, "unassign")
- def start(origPatient: Patient)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[Patient] =
- editAction(origPatient, "start")
- def submit(origPatient: Patient)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[Patient] =
- editAction(origPatient, "submit")
- def restart(origPatient: Patient)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[Patient] =
- editAction(origPatient, "restart")
- def flag(origPatient: Patient)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[Patient] =
- editAction(origPatient, "flag")
- def resolve(origPatient: Patient)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[Patient] =
- editAction(origPatient, "resolve")
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestProviderTypeService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestProviderTypeService.scala
deleted file mode 100644
index ffde086..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestProviderTypeService.scala
+++ /dev/null
@@ -1,34 +0,0 @@
-package xyz.driver.pdsuidomain.services.rest
-
-import scala.concurrent.{ExecutionContext, Future}
-import akka.http.scaladsl.model._
-import akka.stream.Materializer
-import xyz.driver.core.rest.{Pagination => _, _}
-import xyz.driver.entities.users.AuthUserInfo
-import xyz.driver.pdsuicommon.db._
-import xyz.driver.pdsuidomain.ListResponse
-import xyz.driver.pdsuidomain.entities.ProviderType
-import xyz.driver.pdsuidomain.services.ProviderTypeService
-
-class RestProviderTypeService(transport: ServiceTransport, baseUri: Uri)(
- implicit protected val materializer: Materializer,
- protected val exec: ExecutionContext)
- extends ProviderTypeService with RestHelper {
-
- import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._
- import xyz.driver.pdsuidomain.formats.json.listresponse._
- import xyz.driver.pdsuidomain.formats.json.record.providerTypeFormat
- import xyz.driver.pdsuidomain.services.ProviderTypeService._
-
- def getAll(sorting: Option[Sorting] = None)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetListReply] = {
- val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, "/v1/provider-type", sortingQuery(sorting)))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ListResponse[ProviderType]](response)
- } yield {
- GetListReply.EntityList(reply.items, reply.meta.itemsCount)
- }
- }
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestStudyDesignService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestStudyDesignService.scala
deleted file mode 100644
index f8ce502..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestStudyDesignService.scala
+++ /dev/null
@@ -1,34 +0,0 @@
-package xyz.driver.pdsuidomain.services.rest
-
-import scala.concurrent.{ExecutionContext, Future}
-import akka.http.scaladsl.model._
-import akka.stream.Materializer
-import xyz.driver.core.rest._
-import xyz.driver.entities.users.AuthUserInfo
-import xyz.driver.pdsuicommon.db._
-import xyz.driver.pdsuidomain.ListResponse
-import xyz.driver.pdsuidomain.entities.StudyDesign
-import xyz.driver.pdsuidomain.services.StudyDesignService
-
-class RestStudyDesignService(transport: ServiceTransport, baseUri: Uri)(
- implicit protected val materializer: Materializer,
- protected val exec: ExecutionContext)
- extends StudyDesignService with RestHelper {
-
- import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._
- import xyz.driver.pdsuidomain.formats.json.listresponse._
- import xyz.driver.pdsuidomain.formats.json.studydesign._
- import xyz.driver.pdsuidomain.services.StudyDesignService._
-
- def getAll(sorting: Option[Sorting] = None)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetListReply] = {
- val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, "/v1/study-design", sortingQuery(sorting)))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ListResponse[StudyDesign]](response)
- } yield {
- GetListReply.EntityList(reply.items, reply.meta.itemsCount)
- }
- }
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestTrialIssueService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestTrialIssueService.scala
deleted file mode 100644
index b14d35b..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestTrialIssueService.scala
+++ /dev/null
@@ -1,103 +0,0 @@
-package xyz.driver.pdsuidomain.services.rest
-
-import akka.http.scaladsl.marshalling.Marshal
-import akka.http.scaladsl.model._
-import akka.stream.Materializer
-import spray.json.RootJsonReader
-import xyz.driver.core.rest.{AuthorizedServiceRequestContext, ServiceTransport}
-import xyz.driver.entities.users
-import xyz.driver.pdsuicommon.db.{Pagination, SearchFilterExpr, Sorting}
-import xyz.driver.pdsuicommon.domain.{LongId, StringId}
-import xyz.driver.pdsuidomain.ListResponse
-import xyz.driver.pdsuidomain.entities.{Trial, TrialIssue}
-import xyz.driver.pdsuidomain.services.TrialIssueService
-
-import scala.concurrent.ExecutionContext
-
-class RestTrialIssueService(transport: ServiceTransport, baseUri: Uri)
- (implicit
- protected val materializer: Materializer,
- protected val exec: ExecutionContext)
- extends TrialIssueService with RestHelper{
-
- import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._
- import xyz.driver.pdsuidomain.formats.json.listresponse._
- import xyz.driver.pdsuidomain.formats.json.trialissue._
- import xyz.driver.pdsuidomain.services.TrialIssueService._
-
- override def create(draft: TrialIssue)
- (implicit requestContext: AuthorizedServiceRequestContext[users.AuthUserInfo]) = {
- val trialId = draft.trialId
-
- implicit val jsonReader: RootJsonReader[TrialIssue] = trialIssueReader(trialId)
-
- for {
- entity <- Marshal(draft).to[RequestEntity]
- request = HttpRequest(HttpMethods.POST, endpointUri(baseUri, s"/v1/trial/$trialId/issue")).withEntity(entity)
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[TrialIssue](response)
- } yield {
- CreateReply.Created(reply)
- }
- }
-
- override def getListByTrialId(trialId: StringId[Trial],
- filter: SearchFilterExpr,
- sorting: Option[Sorting],
- pagination: Option[Pagination])
- (implicit requestContext: AuthorizedServiceRequestContext[users.AuthUserInfo]) = {
- implicit val jsonReader: RootJsonReader[TrialIssue] = trialIssueReader(trialId)
-
- val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/trial/$trialId/issue",
- filterQuery(filter) ++ sortingQuery(sorting) ++ paginationQuery(pagination))
- )
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ListResponse[TrialIssue]](response)
- } yield {
- GetListByTrialIdReply.EntityList(reply.items, reply.meta.itemsCount, reply.meta.lastUpdate)
- }
- }
-
- override def getById(trialId: StringId[Trial], id: LongId[TrialIssue])
- (implicit requestContext: AuthorizedServiceRequestContext[users.AuthUserInfo]) = {
- implicit val jsonReader: RootJsonReader[TrialIssue] = trialIssueReader(trialId)
-
- val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/trial/$trialId/issue/$id"))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[TrialIssue](response)
- } yield {
- GetByIdReply.Entity(reply)
- }
- }
-
- override def update(orig: TrialIssue, draft: TrialIssue)
- (implicit requestContext: AuthorizedServiceRequestContext[users.AuthUserInfo]) = {
- val trialId = draft.trialId
- val id = orig.id.id
-
- implicit val jsonReader: RootJsonReader[TrialIssue] = trialIssueReader(trialId)
-
- for {
- entity <- Marshal(draft).to[RequestEntity]
- request = HttpRequest(HttpMethods.PATCH, endpointUri(baseUri, s"/v1/trial/$trialId/issue/$id")).withEntity(entity)
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[TrialIssue](response)
- } yield {
- UpdateReply.Updated(reply)
- }
- }
-
- override def delete(trialId: StringId[Trial], id: LongId[TrialIssue])
- (implicit requestContext: AuthorizedServiceRequestContext[users.AuthUserInfo]) = {
- val request = HttpRequest(HttpMethods.DELETE, endpointUri(baseUri, s"/v1/trial/$trialId/issue/$id"))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- _ <- apiResponse[HttpEntity](response)
- } yield {
- DeleteReply.Deleted
- }
- }
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestTrialService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestTrialService.scala
deleted file mode 100644
index 94e1c63..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestTrialService.scala
+++ /dev/null
@@ -1,173 +0,0 @@
-package xyz.driver.pdsuidomain.services.rest
-
-import scala.concurrent.{ExecutionContext, Future}
-import akka.NotUsed
-import akka.stream.scaladsl.Source
-import akka.util.ByteString
-import akka.http.scaladsl.marshalling.Marshal
-import akka.http.scaladsl.model._
-import akka.stream.Materializer
-import xyz.driver.core.rest.{Pagination => _, _}
-import xyz.driver.pdsuicommon.db._
-import xyz.driver.pdsuicommon.domain._
-import xyz.driver.pdsuidomain.entities._
-import xyz.driver.pdsuidomain.entities.export.trial.ExportTrialWithLabels
-import xyz.driver.pdsuidomain.services.TrialService
-import spray.json.DefaultJsonProtocol._
-import xyz.driver.entities.patient.CancerType
-import xyz.driver.entities.users.AuthUserInfo
-import xyz.driver.pdsuidomain.ListResponse
-import xyz.driver.pdsuidomain.formats.json.export._
-
-class RestTrialService(transport: ServiceTransport, baseUri: Uri)(implicit protected val materializer: Materializer,
- protected val exec: ExecutionContext)
- extends TrialService with RestHelper {
-
- import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._
- import xyz.driver.pdsuidomain.formats.json.listresponse._
- import xyz.driver.pdsuidomain.formats.json.trial._
- import xyz.driver.pdsuidomain.services.TrialService._
-
- def getById(id: StringId[Trial])(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetByIdReply] = {
- val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/trial/$id"))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[Trial](response)
- } yield {
- GetByIdReply.Entity(reply)
- }
- }
-
- def getTrialWithLabels(trialId: StringId[Trial], cancerType: CancerType)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetTrialWithLabelsReply] = {
- val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/export/trial/$cancerType/$trialId"))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ExportTrialWithLabels](response)
- } yield {
- GetTrialWithLabelsReply.Entity(reply)
- }
- }
-
- def getTrialsWithLabels(cancerType: CancerType)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetTrialsWithLabelsReply] = {
- val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/export/trial/$cancerType"))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[Seq[ExportTrialWithLabels]](response)
- } yield {
- GetTrialsWithLabelsReply.EntityList(reply)
- }
- }
-
- def getPdfSource(trialId: StringId[Trial])(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]
- ): Future[Source[ByteString, NotUsed]] = {
- val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/trial/$trialId/source"))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[HttpEntity](response)
- } yield {
- reply.dataBytes.mapMaterializedValue(_ => NotUsed)
- }
- }
-
- def getHtmlSource(trialId: StringId[Trial])(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]
- ): Future[Source[ByteString, NotUsed]] = {
- val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/trial/$trialId/source.html"))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[HttpEntity](response)
- } yield {
- reply.dataBytes.mapMaterializedValue(_ => NotUsed)
- }
- }
-
- def getAll(filter: SearchFilterExpr = SearchFilterExpr.Empty,
- sorting: Option[Sorting] = None,
- pagination: Option[Pagination] = None)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetListReply] = {
- val request = HttpRequest(
- HttpMethods.GET,
- endpointUri(baseUri, "/v1/trial", filterQuery(filter) ++ sortingQuery(sorting) ++ paginationQuery(pagination)))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ListResponse[Trial]](response)
- } yield {
- GetListReply.EntityList(reply.items, reply.meta.itemsCount, reply.meta.lastUpdate)
- }
- }
-
- def update(origTrial: Trial, draftTrial: Trial)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] = {
- val id = origTrial.id.id
- for {
- entity <- Marshal(draftTrial).to[RequestEntity]
- request = HttpRequest(HttpMethods.PATCH, endpointUri(baseUri, s"/v1/trial/$id")).withEntity(entity)
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[Trial](response)
- } yield {
- UpdateReply.Updated(reply)
- }
- }
-
- private def singleAction(origTrial: Trial, action: String, comment: Option[String] = None)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] = {
-
- val query = comment match {
- case Some(s) => Seq("comment" -> s)
- case None => Seq.empty[(String, String)]
- }
-
- val id = origTrial.id.id
- val request = HttpRequest(HttpMethods.POST, endpointUri(baseUri, s"/v1/trial/$id/$action", query))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[Trial](response)
- } yield {
- UpdateReply.Updated(reply)
- }
- }
-
- def start(origTrial: Trial)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] =
- singleAction(origTrial, "start")
-
- def submit(origTrial: Trial)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] =
- singleAction(origTrial, "submit")
-
- def restart(origTrial: Trial)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] =
- singleAction(origTrial, "restart")
-
- def flag(origTrial: Trial)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] =
- singleAction(origTrial, "flag")
-
- def resolve(origTrial: Trial)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] =
- singleAction(origTrial, "resolve")
-
- def archive(origTrial: Trial, comment: Option[String])(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] =
- singleAction(origTrial, "archive", comment)
-
- def unassign(origTrial: Trial)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] =
- singleAction(origTrial, "unassign")
-
- override def addTrial(trial: TrialCreationRequest)(
- implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[Trial] = {
- for {
- entity <- Marshal(trial).to[RequestEntity]
- request = HttpRequest(HttpMethods.POST, endpointUri(baseUri, s"/v1/trial/${trial.nctId}")).withEntity(entity)
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[Trial](response)
- } yield {
- reply
- }
- }
-}