diff options
Diffstat (limited to 'src/main/scala/xyz/driver/pdsuidomain/services')
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) } } |