diff options
author | Vlad Uspensky <v.uspenskiy@icloud.com> | 2017-07-21 19:14:02 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-07-21 19:14:02 -0700 |
commit | a835eef22830ab86a9f65194a6645f4f474ae0cc (patch) | |
tree | 13c14e33e346560a8db587b589b6a9464f3e6616 /src/main/scala/xyz/driver/pdsuidomain/services | |
parent | 525ef428d950a6c9ddb58247101aeb1cb1f42d80 (diff) | |
parent | 92f503ce18e90c9955bed8b0a8c6ec2e30f0304e (diff) | |
download | rest-query-a835eef22830ab86a9f65194a6645f4f474ae0cc.tar.gz rest-query-a835eef22830ab86a9f65194a6645f4f474ae0cc.tar.bz2 rest-query-a835eef22830ab86a9f65194a6645f4f474ae0cc.zip |
Merge pull request #9 from drivergroup/export-service-separationv0.2.4
Export service separation
Diffstat (limited to 'src/main/scala/xyz/driver/pdsuidomain/services')
6 files changed, 87 insertions, 70 deletions
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/ExportService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/ExportService.scala deleted file mode 100644 index a313703..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/services/ExportService.scala +++ /dev/null @@ -1,63 +0,0 @@ -package xyz.driver.pdsuidomain.services - -import java.time.LocalDateTime - -import xyz.driver.pdsuicommon.auth.AnonymousRequestContext -import xyz.driver.pdsuicommon.db.SearchFilterExpr -import xyz.driver.pdsuicommon.domain._ -import xyz.driver.pdsuicommon.error.DomainError -import xyz.driver.pdsuidomain.entities.export.patient.ExportPatientWithLabels -import xyz.driver.pdsuidomain.entities.export.trial.{ExportTrial, ExportTrialWithLabels} -import xyz.driver.pdsuidomain.entities.{MedicalRecord, Patient, Trial} - -import scala.concurrent.Future - -object ExportService { - - sealed trait GetPatientReply - object GetPatientReply { - type Error = GetPatientReply with DomainError - - final case class Entity(x: ExportPatientWithLabels) extends GetPatientReply - - case object NotFoundError extends GetPatientReply with DomainError.NotFoundError { - def userMessage: String = "Patient not found" - } - } - - sealed trait GetTrialListReply - object GetTrialListReply { - final case class EntityList(xs: Seq[ExportTrial], totalFound: Int, lastUpdate: Option[LocalDateTime]) - extends GetTrialListReply - } - - sealed trait GetTrialReply - object GetTrialReply { - type Error = GetTrialReply with DomainError - - final case class Entity(x: ExportTrialWithLabels) extends GetTrialReply - - case object NotFoundError extends GetTrialReply with DomainError.NotFoundError { - def userMessage: String = "Trial not found" - } - } -} - -trait ExportService { - - import ExportService._ - - def getPatient(id: UuidId[Patient])(implicit requestContext: AnonymousRequestContext): Future[GetPatientReply] - - def getTrialList(filter: SearchFilterExpr = SearchFilterExpr.Empty)( - implicit requestContext: AnonymousRequestContext): Future[GetTrialListReply] - - def getTrial(trialId: StringId[Trial], condition: String)( - implicit requestContext: AnonymousRequestContext): Future[GetTrialReply] - - def getRecords(patientId: UuidId[Patient])( - implicit requestContext: AnonymousRequestContext): Future[MedicalRecordService.GetListReply] - - def getRecordPdf(recordId: LongId[MedicalRecord])( - implicit requestContext: AnonymousRequestContext): Future[MedicalRecordService.GetPdfSourceReply] -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/ExtractedDataService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/ExtractedDataService.scala index afb994e..9bcd921 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/services/ExtractedDataService.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/services/ExtractedDataService.scala @@ -2,10 +2,11 @@ package xyz.driver.pdsuidomain.services import xyz.driver.pdsuicommon.auth.AuthenticatedRequestContext import xyz.driver.pdsuicommon.db.{Pagination, SearchFilterExpr, Sorting} -import xyz.driver.pdsuicommon.domain.LongId +import xyz.driver.pdsuicommon.domain.{LongId, UuidId} import xyz.driver.pdsuicommon.error.DomainError import xyz.driver.pdsuicommon.logging._ import xyz.driver.pdsuidomain.entities._ +import xyz.driver.pdsuidomain.entities.export.patient.ExportPatientWithLabels import scala.concurrent.Future @@ -49,6 +50,17 @@ object ExtractedDataService { extends GetListReply with DomainError.AuthorizationError with DefaultAccessDeniedError } + sealed trait GetPatientLabelsReply + object GetPatientLabelsReply { + type Error = GetPatientLabelsReply with DomainError + + final case class Entity(x: ExportPatientWithLabels) extends GetPatientLabelsReply + + case object NotFoundError extends GetPatientLabelsReply with DomainError.NotFoundError { + def userMessage: String = "Patient not found" + } + } + sealed trait CreateReply object CreateReply { type Error = CreateReply with DomainError @@ -93,6 +105,9 @@ trait ExtractedDataService { def getById(id: LongId[ExtractedData])(implicit requestContext: AuthenticatedRequestContext): Future[GetByIdReply] + def getPatientLabels(id: UuidId[Patient])( + implicit requestContext: AuthenticatedRequestContext): Future[GetPatientLabelsReply] + def getAll(filter: SearchFilterExpr = SearchFilterExpr.Empty, sorting: Option[Sorting] = None, pagination: Option[Pagination] = None)( diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/MedicalRecordService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/MedicalRecordService.scala index b2fc9f9..46e9156 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/services/MedicalRecordService.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/services/MedicalRecordService.scala @@ -4,7 +4,7 @@ import java.time.LocalDateTime import xyz.driver.pdsuicommon.auth.AuthenticatedRequestContext import xyz.driver.pdsuicommon.db._ -import xyz.driver.pdsuicommon.domain.LongId +import xyz.driver.pdsuicommon.domain.{LongId, UuidId} import xyz.driver.pdsuicommon.error._ import xyz.driver.pdsuidomain.entities.MedicalRecord.PdfSource import xyz.driver.pdsuidomain.entities._ @@ -60,8 +60,14 @@ object MedicalRecordService { final case class EntityList(xs: Seq[MedicalRecord], totalFound: Int, lastUpdate: Option[LocalDateTime]) extends GetListReply + type Error = GetListReply with DomainError + case object AuthorizationError extends GetListReply with DomainError.AuthorizationError with DefaultAccessDeniedError + + case object NotFoundError extends GetListReply with DomainError.NotFoundError { + def userMessage: String = "Patient wasn't found" + } } sealed trait CreateReply @@ -93,6 +99,9 @@ trait MedicalRecordService { def getById(recordId: LongId[MedicalRecord])( implicit requestContext: AuthenticatedRequestContext): Future[GetByIdReply] + def getPatientRecords(patientId: UuidId[Patient])( + implicit requestContext: AuthenticatedRequestContext): Future[GetListReply] + def getPdfSource(recordId: LongId[MedicalRecord])( implicit requestContext: AuthenticatedRequestContext): Future[GetPdfSourceReply] diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/TrialService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/TrialService.scala index 3148842..d140d27 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/services/TrialService.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/services/TrialService.scala @@ -9,6 +9,7 @@ import xyz.driver.pdsuicommon.error.DomainError import xyz.driver.pdsuicommon.logging._ import xyz.driver.pdsuidomain.entities.Trial import xyz.driver.pdsuidomain.entities.Trial.PdfSource +import xyz.driver.pdsuidomain.entities.export.trial.ExportTrialWithLabels import scala.concurrent.Future @@ -51,6 +52,20 @@ object TrialService { } } + sealed trait GetTrialWithLabelsReply + object GetTrialWithLabelsReply { + type Error = GetTrialWithLabelsReply with DomainError + + final case class Entity(x: ExportTrialWithLabels) extends GetTrialWithLabelsReply + + case object NotFoundError extends GetTrialWithLabelsReply with DomainError.NotFoundError { + def userMessage: String = "Trial not found" + } + + case object AuthorizationError + extends GetTrialWithLabelsReply with DomainError.AuthorizationError with DefaultAccessDeniedError + } + sealed trait GetPdfSourceReply object GetPdfSourceReply { type Error = GetPdfSourceReply with DomainError @@ -95,6 +110,9 @@ trait TrialService { def getById(id: StringId[Trial])(implicit requestContext: AuthenticatedRequestContext): Future[GetByIdReply] + def getTrialWithLabels(trialId: StringId[Trial], condition: String)( + implicit requestContext: AuthenticatedRequestContext): Future[GetTrialWithLabelsReply] + def getPdfSource(trialId: StringId[Trial])( implicit requestContext: AuthenticatedRequestContext): Future[GetPdfSourceReply] 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 bd176b3..7c0e313 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/services/fake/FakeTrialService.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/services/fake/FakeTrialService.scala @@ -1,11 +1,15 @@ package xyz.driver.pdsuidomain.services.fake import java.time.LocalDateTime + +import xyz.driver.core.generators import xyz.driver.pdsuicommon.auth.AuthenticatedRequestContext import xyz.driver.pdsuicommon.db._ -import xyz.driver.pdsuicommon.domain.{StringId, UuidId} -import xyz.driver.pdsuidomain.entities.Trial +import xyz.driver.pdsuicommon.domain.{LongId, StringId, UuidId} +import xyz.driver.pdsuidomain.entities.{Arm, Criterion, Label, Trial} +import xyz.driver.pdsuidomain.entities.export.trial.{ExportTrialArm, ExportTrialLabelCriterion, ExportTrialWithLabels} import xyz.driver.pdsuidomain.services.TrialService + import scala.concurrent.Future class FakeTrialService extends TrialService { @@ -49,6 +53,31 @@ class FakeTrialService extends TrialService { implicit requestContext: AuthenticatedRequestContext): Future[GetListReply] = Future.successful(GetListReply.EntityList(Seq(trial), 1, None)) + override def getTrialWithLabels(trialId: StringId[Trial], condition: String)( + implicit requestContext: AuthenticatedRequestContext): Future[GetTrialWithLabelsReply] = { + Future.successful( + GetTrialWithLabelsReply.Entity(ExportTrialWithLabels( + StringId[Trial]("NCT" + generators.nextInt(999999).toString), + UuidId[Trial](generators.nextUuid()), + generators.oneOf("adenocarcinoma", "breast", "prostate"), + LocalDateTime.now(), + labelVersion = 1L, + generators.listOf(new ExportTrialArm( + LongId[Arm](generators.nextInt(999999).toLong), + generators.nextName().value + )), + generators.listOf(new ExportTrialLabelCriterion( + LongId[Criterion](generators.nextInt(999999).toLong), + generators.nextOption(generators.nextBoolean()), + LongId[Label](generators.nextInt(999999).toLong), + generators.setOf(LongId[Arm](generators.nextInt(999999).toLong)), + generators.nextName().value, + generators.nextBoolean(), + generators.nextBoolean() + )) + ))) + } + def update(origTrial: Trial, draftTrial: Trial)( implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] = Future.successful(UpdateReply.Updated(draftTrial)) 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 54f5f2e..9f72760 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestTrialService.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestTrialService.scala @@ -1,8 +1,6 @@ package xyz.driver.pdsuidomain.services.rest -import scala.NotImplementedError import scala.concurrent.{ExecutionContext, Future} - import akka.http.scaladsl.marshalling.Marshal import akka.http.scaladsl.model._ import akka.stream.Materializer @@ -12,6 +10,7 @@ import xyz.driver.pdsuicommon.db._ import xyz.driver.pdsuicommon.domain._ import xyz.driver.pdsuidomain.entities._ 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 @@ -32,6 +31,17 @@ class RestTrialService(transport: ServiceTransport, baseUri: Uri)(implicit prote } } + def getTrialWithLabels(trialId: StringId[Trial], condition: String)( + implicit requestContext: AuthenticatedRequestContext): Future[GetTrialWithLabelsReply] = { + val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/export/trial/$trialId")) + for { + response <- transport.sendRequestGetResponse(requestContext)(request) + reply <- apiResponse[ApiExportTrialWithLabels](response) + } yield { + GetTrialWithLabelsReply.Entity(reply.toDomain) + } + } + def getPdfSource(trialId: StringId[Trial])( implicit requestContext: AuthenticatedRequestContext): Future[GetPdfSourceReply] = Future.failed(new NotImplementedError("Streaming PDF over network is not supported.")) @@ -90,5 +100,4 @@ class RestTrialService(transport: ServiceTransport, baseUri: Uri)(implicit prote singleAction(origTrial, "archive") def unassign(origTrial: Trial)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] = singleAction(origTrial, "unassign") - } |