aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Odersky <jakob@driver.xyz>2017-08-07 15:52:34 -0700
committerJakob Odersky <jakob@driver.xyz>2017-08-16 19:26:10 -0700
commit5ad077c8ae500f6154043dc0c8ffd457ddaba204 (patch)
tree1da688c2c03e00d9a06aafd1df97c6f87e4eaa7a
parent7f3e788642b1d3946fccc0e13d3c3121034d9d7d (diff)
downloadrest-query-5ad077c8ae500f6154043dc0c8ffd457ddaba204.tar.gz
rest-query-5ad077c8ae500f6154043dc0c8ffd457ddaba204.tar.bz2
rest-query-5ad077c8ae500f6154043dc0c8ffd457ddaba204.zip
Use akka streams in trial pdfs
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/Trial.scala3
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/TrialService.scala24
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/fake/FakeTrialService.scala5
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/rest/RestTrialService.scala14
4 files changed, 20 insertions, 26 deletions
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/Trial.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/Trial.scala
index 2f90820..db4def2 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/Trial.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/entities/Trial.scala
@@ -1,6 +1,5 @@
package xyz.driver.pdsuidomain.entities
-import java.nio.file.Path
import java.time.LocalDateTime
import xyz.driver.pdsuicommon.domain.{LongId, StringId, User, UuidId}
@@ -52,8 +51,6 @@ object Trial {
implicit def toPhiString(x: Status): PhiString = Unsafe(Utils.getClassSimpleName(x.getClass))
}
- final case class PdfSource(path: Path) extends AnyVal
-
implicit def toPhiString(x: Trial): PhiString = {
import x._
phi"Trial(id=$id, externalId=$externalId, status=$status, previousStatus=$previousStatus, " +
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/TrialService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/TrialService.scala
index d140d27..5bd99a8 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/services/TrialService.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/services/TrialService.scala
@@ -2,13 +2,15 @@ package xyz.driver.pdsuidomain.services
import java.time.LocalDateTime
+import akka.NotUsed
+import akka.stream.scaladsl.Source
+import akka.util.ByteString
import xyz.driver.pdsuicommon.auth.AuthenticatedRequestContext
import xyz.driver.pdsuicommon.db._
import xyz.driver.pdsuicommon.domain.StringId
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
@@ -66,24 +68,6 @@ object TrialService {
extends GetTrialWithLabelsReply with DomainError.AuthorizationError with DefaultAccessDeniedError
}
- sealed trait GetPdfSourceReply
- object GetPdfSourceReply {
- type Error = GetPdfSourceReply with DomainError
-
- final case class Entity(x: PdfSource) extends GetPdfSourceReply
-
- case object AuthorizationError
- extends GetPdfSourceReply with DomainError.AuthorizationError with DefaultAccessDeniedError
-
- case object NotFoundError extends GetPdfSourceReply with DomainError.NotFoundError {
- def userMessage: String = "Trial's PDF hasn't been found"
- }
-
- case object TrialNotFoundError extends GetPdfSourceReply with DomainError.NotFoundError with DefaultNotFoundError
-
- final case class CommonError(userMessage: String) extends GetPdfSourceReply with DomainError
- }
-
sealed trait UpdateReply
object UpdateReply {
type Error = UpdateReply with DomainError
@@ -114,7 +98,7 @@ trait TrialService {
implicit requestContext: AuthenticatedRequestContext): Future[GetTrialWithLabelsReply]
def getPdfSource(trialId: StringId[Trial])(
- implicit requestContext: AuthenticatedRequestContext): Future[GetPdfSourceReply]
+ implicit requestContext: AuthenticatedRequestContext): Future[Source[ByteString, NotUsed]]
def getAll(filter: SearchFilterExpr = SearchFilterExpr.Empty,
sorting: Option[Sorting] = None,
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 7c0e313..3793c1f 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/services/fake/FakeTrialService.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/services/fake/FakeTrialService.scala
@@ -2,6 +2,9 @@ package xyz.driver.pdsuidomain.services.fake
import java.time.LocalDateTime
+import akka.NotUsed
+import akka.stream.scaladsl.Source
+import akka.util.ByteString
import xyz.driver.core.generators
import xyz.driver.pdsuicommon.auth.AuthenticatedRequestContext
import xyz.driver.pdsuicommon.db._
@@ -44,7 +47,7 @@ class FakeTrialService extends TrialService {
)
def getPdfSource(trialId: StringId[Trial])(
- implicit requestContext: AuthenticatedRequestContext): Future[GetPdfSourceReply] =
+ implicit requestContext: AuthenticatedRequestContext): Future[Source[ByteString, NotUsed]] =
Future.failed(new NotImplementedError("fake pdf download is not implemented"))
def getAll(filter: SearchFilterExpr = SearchFilterExpr.Empty,
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 9f72760..a68cb52 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestTrialService.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestTrialService.scala
@@ -1,6 +1,9 @@
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
@@ -43,8 +46,15 @@ class RestTrialService(transport: ServiceTransport, baseUri: Uri)(implicit prote
}
def getPdfSource(trialId: StringId[Trial])(
- implicit requestContext: AuthenticatedRequestContext): Future[GetPdfSourceReply] =
- Future.failed(new NotImplementedError("Streaming PDF over network is not supported."))
+ implicit requestContext: AuthenticatedRequestContext): 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 getAll(filter: SearchFilterExpr = SearchFilterExpr.Empty,
sorting: Option[Sorting] = None,