aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/xyz/driver/pdsuidomain/services
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/scala/xyz/driver/pdsuidomain/services')
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/EligibilityVerificationService.scala19
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/PatientCriterionService.scala1
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/PatientEligibleTrialService.scala1
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/PatientLabelEvidenceService.scala1
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/PatientLabelService.scala1
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/fake/FakeEligibilityVerificationService.scala31
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/fake/FakeTrialService.scala3
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/rest/RestEligibilityVerificationService.scala46
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/rest/RestExtractedDataService.scala9
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/rest/RestTrialService.scala8
10 files changed, 112 insertions, 8 deletions
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/EligibilityVerificationService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/EligibilityVerificationService.scala
new file mode 100644
index 0000000..7395400
--- /dev/null
+++ b/src/main/scala/xyz/driver/pdsuidomain/services/EligibilityVerificationService.scala
@@ -0,0 +1,19 @@
+package xyz.driver.pdsuidomain.services
+
+import xyz.driver.core.Id
+import xyz.driver.core.rest.AuthorizedServiceRequestContext
+import xyz.driver.entities.patient.{CancerType, Patient}
+import xyz.driver.entities.users.AuthUserInfo
+import xyz.driver.pdsuidomain.entities.eligibility.{MatchedPatient, MismatchRankedLabels}
+import xyz.driver.pdsuidomain.entities.Arm
+
+import scala.concurrent.Future
+import scalaz.ListT
+
+trait EligibilityVerificationService {
+
+ def getMatchedPatients()(implicit ctx: AuthorizedServiceRequestContext[AuthUserInfo]): ListT[Future, MatchedPatient]
+
+ def getMismatchRankedLabels(patientId: Id[Patient], cancerType: CancerType, excludedArms: Seq[Id[Arm]])(
+ implicit ctx: AuthorizedServiceRequestContext[AuthUserInfo]): Future[MismatchRankedLabels]
+}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/PatientCriterionService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/PatientCriterionService.scala
index 9ff3879..6d85f85 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/services/PatientCriterionService.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/services/PatientCriterionService.scala
@@ -2,6 +2,7 @@ package xyz.driver.pdsuidomain.services
import java.time.LocalDateTime
+import xyz.driver.entities.labels.Label
import xyz.driver.pdsuicommon.auth.AuthenticatedRequestContext
import xyz.driver.pdsuicommon.db._
import xyz.driver.pdsuicommon.domain._
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/PatientEligibleTrialService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/PatientEligibleTrialService.scala
index 2c17f74..abb3f8a 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/services/PatientEligibleTrialService.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/services/PatientEligibleTrialService.scala
@@ -1,5 +1,6 @@
package xyz.driver.pdsuidomain.services
+import xyz.driver.entities.labels.Label
import xyz.driver.pdsuicommon.auth.AuthenticatedRequestContext
import xyz.driver.pdsuicommon.db.{Pagination, SearchFilterExpr, Sorting}
import xyz.driver.pdsuicommon.domain.{LongId, UuidId}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/PatientLabelEvidenceService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/PatientLabelEvidenceService.scala
index 56e2e3d..6871f3e 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/services/PatientLabelEvidenceService.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/services/PatientLabelEvidenceService.scala
@@ -1,5 +1,6 @@
package xyz.driver.pdsuidomain.services
+import xyz.driver.entities.labels.Label
import xyz.driver.pdsuicommon.auth.AuthenticatedRequestContext
import xyz.driver.pdsuicommon.db._
import xyz.driver.pdsuicommon.domain.{LongId, UuidId}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/PatientLabelService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/PatientLabelService.scala
index 71b8bd4..2a4d7fc 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/services/PatientLabelService.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/services/PatientLabelService.scala
@@ -1,5 +1,6 @@
package xyz.driver.pdsuidomain.services
+import xyz.driver.entities.labels.Label
import xyz.driver.pdsuicommon.auth.AuthenticatedRequestContext
import xyz.driver.pdsuicommon.db._
import xyz.driver.pdsuicommon.domain._
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/fake/FakeEligibilityVerificationService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/fake/FakeEligibilityVerificationService.scala
new file mode 100644
index 0000000..1e1a3ea
--- /dev/null
+++ b/src/main/scala/xyz/driver/pdsuidomain/services/fake/FakeEligibilityVerificationService.scala
@@ -0,0 +1,31 @@
+package xyz.driver.pdsuidomain.services.fake
+
+import xyz.driver.core.rest.AuthorizedServiceRequestContext
+import xyz.driver.core.{Id, generators}
+import xyz.driver.entities.patient
+import xyz.driver.entities.patient.Patient
+import xyz.driver.entities.users.AuthUserInfo
+import xyz.driver.pdsuidomain.entities.eligibility.MismatchRankedLabels
+import xyz.driver.pdsuidomain.entities.{Arm, eligibility}
+import xyz.driver.pdsuidomain.services.EligibilityVerificationService
+
+import scala.concurrent.Future
+import scalaz.ListT
+
+class FakeEligibilityVerificationService extends EligibilityVerificationService {
+
+ override def getMatchedPatients()(
+ implicit ctx: AuthorizedServiceRequestContext[AuthUserInfo]): ListT[Future, eligibility.MatchedPatient] =
+ ListT.listT[Future](
+ Future.successful(List(xyz.driver.pdsuidomain.fakes.entities.eligibility.nextMatchedPatient())))
+
+ override def getMismatchRankedLabels(patientId: Id[Patient],
+ cancerType: patient.CancerType,
+ excludedArms: Seq[Id[Arm]])(
+ implicit ctx: AuthorizedServiceRequestContext[AuthUserInfo]): Future[eligibility.MismatchRankedLabels] =
+ Future.successful(
+ MismatchRankedLabels(
+ generators.seqOf(xyz.driver.pdsuidomain.fakes.entities.eligibility.nextLabelMismatchRank()),
+ labelVersion = generators.nextInt(10)
+ ))
+}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/fake/FakeTrialService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/fake/FakeTrialService.scala
index e10165c..9253f88 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/services/fake/FakeTrialService.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/services/fake/FakeTrialService.scala
@@ -6,10 +6,11 @@ import akka.NotUsed
import akka.stream.scaladsl.Source
import akka.util.ByteString
import xyz.driver.core.generators
+import xyz.driver.entities.labels.Label
import xyz.driver.pdsuicommon.auth.AuthenticatedRequestContext
import xyz.driver.pdsuicommon.db._
import xyz.driver.pdsuicommon.domain.{LongId, StringId, UuidId}
-import xyz.driver.pdsuidomain.entities.{Arm, Criterion, Label, Trial}
+import xyz.driver.pdsuidomain.entities.{Arm, Criterion, Trial}
import xyz.driver.pdsuidomain.entities.export.trial.{ExportTrialArm, ExportTrialLabelCriterion, ExportTrialWithLabels}
import xyz.driver.pdsuidomain.services.TrialService
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestEligibilityVerificationService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestEligibilityVerificationService.scala
new file mode 100644
index 0000000..f6879d0
--- /dev/null
+++ b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestEligibilityVerificationService.scala
@@ -0,0 +1,46 @@
+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.pdsuidomain.entities.eligibility.{MatchedPatient, MismatchRankedLabels}
+import xyz.driver.pdsuidomain.entities.{Arm, 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.sprayformats.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[Id[Arm]])(
+ implicit ctx: AuthorizedServiceRequestContext[AuthUserInfo]): Future[eligibility.MismatchRankedLabels] = {
+
+ val query =
+ Seq("disease" -> cancerType.toString.toUpperCase, "ineligible_arms" -> excludedArms.map(_.value).mkString(","))
+
+ 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
index 53b9f38..a65e1f4 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestExtractedDataService.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestExtractedDataService.scala
@@ -1,7 +1,6 @@
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
@@ -10,10 +9,12 @@ import xyz.driver.pdsuicommon.auth._
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.formats.json.ListResponse
-import xyz.driver.pdsuidomain.formats.json.export.ApiExportPatientWithLabels
import xyz.driver.pdsuidomain.formats.json.extracteddata.ApiExtractedData
import xyz.driver.pdsuidomain.services.ExtractedDataService
+import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._
+import xyz.driver.pdsuidomain.formats.json.sprayformats.export._
class RestExtractedDataService(transport: ServiceTransport, baseUri: Uri)(
implicit protected val materializer: Materializer,
@@ -88,9 +89,9 @@ class RestExtractedDataService(transport: ServiceTransport, baseUri: Uri)(
val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/export/patient/$id"))
for {
response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ApiExportPatientWithLabels](response)
+ reply <- apiResponse[ExportPatientWithLabels](response)
} yield {
- GetPatientLabelsReply.Entity(reply.toDomain)
+ GetPatientLabelsReply.Entity(reply)
}
}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestTrialService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestTrialService.scala
index b77e6df..7e33919 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestTrialService.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestTrialService.scala
@@ -12,10 +12,12 @@ import xyz.driver.pdsuicommon.auth._
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.formats.json.ListResponse
-import xyz.driver.pdsuidomain.formats.json.export.ApiExportTrialWithLabels
import xyz.driver.pdsuidomain.formats.json.trial.ApiTrial
import xyz.driver.pdsuidomain.services.TrialService
+import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._
+import xyz.driver.pdsuidomain.formats.json.sprayformats.export._
class RestTrialService(transport: ServiceTransport, baseUri: Uri)(implicit protected val materializer: Materializer,
protected val exec: ExecutionContext)
@@ -39,9 +41,9 @@ class RestTrialService(transport: ServiceTransport, baseUri: Uri)(implicit prote
val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/export/trial/$disease/$trialId"))
for {
response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ApiExportTrialWithLabels](response)
+ reply <- apiResponse[ExportTrialWithLabels](response)
} yield {
- GetTrialWithLabelsReply.Entity(reply.toDomain)
+ GetTrialWithLabelsReply.Entity(reply)
}
}