aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/xyz/driver/pdsuidomain/services
diff options
context:
space:
mode:
authorvlad <vlad@driver.xyz>2017-07-21 15:11:19 -0700
committervlad <vlad@driver.xyz>2017-07-21 15:11:19 -0700
commit4c9d4f0679f7b1f4ab179c8d3208cf207c81635a (patch)
tree399852c34f3c5bb734a8deb5df4e85fae09cfd3d /src/main/scala/xyz/driver/pdsuidomain/services
parent5279d01cedb35a759347f194c0e8adb21d19e88e (diff)
downloadrest-query-4c9d4f0679f7b1f4ab179c8d3208cf207c81635a.tar.gz
rest-query-4c9d4f0679f7b1f4ab179c8d3208cf207c81635a.tar.bz2
rest-query-4c9d4f0679f7b1f4ab179c8d3208cf207c81635a.zip
Export service separation
Diffstat (limited to 'src/main/scala/xyz/driver/pdsuidomain/services')
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/ExportService.scala63
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/MedicalRecordService.scala5
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/PatientService.scala15
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/TrialService.scala18
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/rest/RestTrialService.scala15
5 files changed, 49 insertions, 67 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/MedicalRecordService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/MedicalRecordService.scala
index b2fc9f9..cfdb2b1 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._
@@ -93,6 +93,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/PatientService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/PatientService.scala
index ce70934..b2a140c 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/services/PatientService.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/services/PatientService.scala
@@ -8,6 +8,7 @@ import xyz.driver.pdsuicommon.domain._
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
@@ -50,6 +51,17 @@ object PatientService {
}
}
+ sealed trait GetPatientWithLabelsReply
+ object GetPatientWithLabelsReply {
+ type Error = GetPatientWithLabelsReply with DomainError
+
+ final case class Entity(x: ExportPatientWithLabels) extends GetPatientWithLabelsReply
+
+ case object NotFoundError extends GetPatientWithLabelsReply with DomainError.NotFoundError {
+ def userMessage: String = "Patient not found"
+ }
+ }
+
sealed trait UpdateReply
object UpdateReply {
type Error = UpdateReply with DomainError
@@ -76,6 +88,9 @@ trait PatientService {
def getById(id: UuidId[Patient])(implicit requestContext: AuthenticatedRequestContext): Future[GetByIdReply]
+ def getExportPatient(id: UuidId[Patient])(
+ implicit requestContext: AuthenticatedRequestContext): Future[GetPatientWithLabelsReply]
+
def getAll(filter: SearchFilterExpr = SearchFilterExpr.Empty,
sorting: Option[Sorting] = None,
pagination: Option[Pagination] = None)(
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/rest/RestTrialService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestTrialService.scala
index e1f9d87..b8aae88 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.ActorMaterializer
@@ -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
@@ -33,6 +32,17 @@ class RestTrialService(transport: ServiceTransport, baseUri: Uri)(
}
}
+ 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."))
@@ -91,5 +101,4 @@ class RestTrialService(transport: ServiceTransport, baseUri: Uri)(
singleAction(origTrial, "archive")
def unassign(origTrial: Trial)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] =
singleAction(origTrial, "unassign")
-
}