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/ScrapedTrialsService.scala53
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/TrialService.scala7
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/fake/FakeTrialService.scala12
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/rest/RestTrialService.scala24
4 files changed, 40 insertions, 56 deletions
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/ScrapedTrialsService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/ScrapedTrialsService.scala
deleted file mode 100644
index 233495e..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/ScrapedTrialsService.scala
+++ /dev/null
@@ -1,53 +0,0 @@
-package xyz.driver.pdsuidomain.services
-
-import xyz.driver.pdsuicommon.error.DomainError
-import xyz.driver.pdsuidomain.entities.ScrapedTrial
-
-import scala.concurrent.Future
-
-object ScrapedTrialsService {
-
- sealed trait GetRawTrialReply
- object GetRawTrialReply {
- type Error = GetRawTrialReply with DomainError
-
- final case class TrialRawEntity(rawTrial: ScrapedTrial) extends GetRawTrialReply
-
- case object NotFoundError extends GetRawTrialReply with DomainError.NotFoundError {
- override def userMessage: String = "Raw clinical trial not found"
- }
- }
-
- sealed trait GetRawTrialOptReply
- object GetRawTrialOptReply {
- final case class TrialRawEntity(rawTrial: Option[ScrapedTrial]) extends GetRawTrialOptReply
- }
-
- sealed trait GetAllRawTrialsExceptReply
- object GetAllRawTrialsExceptReply {
- final case class MultipleRawTrials(rawTrials: Seq[ScrapedTrial]) extends GetAllRawTrialsExceptReply
- }
-
- sealed trait GetHtmlForReply
- object GetHtmlForReply {
- type TrialHtmlMap = Map[String, String]
-
- /**
- * @param trialHtmlMap nctId -> html
- */
- final case class HtmlMap(trialHtmlMap: TrialHtmlMap) extends GetHtmlForReply
- }
-}
-
-trait ScrapedTrialsService {
-
- import ScrapedTrialsService._
-
- def getRawTrial(nctId: String): Future[GetRawTrialReply]
-
- def getRawTrialOpt(nctId: String): Future[GetRawTrialOptReply]
-
- def getAllRawTrialsExcept(nctIds: Seq[String], limit: Int): Future[GetAllRawTrialsExceptReply]
-
- def getHtmlFor(nctIds: Set[String]): Future[GetHtmlForReply]
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/TrialService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/TrialService.scala
index 4d61342..9ae1c10 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/services/TrialService.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/services/TrialService.scala
@@ -12,7 +12,7 @@ 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, TrialCreationRequest}
import xyz.driver.pdsuidomain.entities.export.trial.ExportTrialWithLabels
import scala.concurrent.Future
@@ -121,6 +121,9 @@ trait TrialService {
def getPdfSource(trialId: StringId[Trial])(
implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[Source[ByteString, NotUsed]]
+ def getHtmlSource(trialId: StringId[Trial])(
+ implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[Source[ByteString, NotUsed]]
+
def getAll(filter: SearchFilterExpr = SearchFilterExpr.Empty,
sorting: Option[Sorting] = None,
pagination: Option[Pagination] = None)(
@@ -150,4 +153,6 @@ trait TrialService {
def unassign(origTrial: Trial)(
implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply]
+ def addTrial(trial: TrialCreationRequest)(
+ implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[Trial]
}
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 7d44309..221e56c 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/services/fake/FakeTrialService.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/services/fake/FakeTrialService.scala
@@ -13,7 +13,7 @@ import xyz.driver.entities.users.AuthUserInfo
import xyz.driver.pdsuicommon.db._
import xyz.driver.pdsuicommon.domain.{LongId, StringId, UuidId}
import xyz.driver.pdsuidomain.entities.export.trial.{ExportTrialArm, ExportTrialLabelCriterion, ExportTrialWithLabels}
-import xyz.driver.pdsuidomain.entities.{Criterion, EligibilityArm, Trial}
+import xyz.driver.pdsuidomain.entities._
import xyz.driver.pdsuidomain.services.TrialService
import scala.concurrent.Future
@@ -52,7 +52,12 @@ class FakeTrialService extends TrialService {
def getPdfSource(trialId: StringId[Trial])(
implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]
): Future[Source[ByteString, NotUsed]] =
- Future.failed(new NotImplementedError("fake pdf download is not implemented"))
+ Future.failed(new NotImplementedError("fake PDF download is not implemented"))
+
+ def getHtmlSource(trialId: StringId[Trial])(
+ implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]
+ ): Future[Source[ByteString, NotUsed]] =
+ Future.failed(new NotImplementedError("fake HTML download is not implemented"))
def getAll(filter: SearchFilterExpr = SearchFilterExpr.Empty,
sorting: Option[Sorting] = None,
@@ -125,4 +130,7 @@ class FakeTrialService extends TrialService {
implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] =
update(origTrial, origTrial)
+ def addTrial(newTrial: TrialCreationRequest)(
+ implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[Trial] =
+ Future.successful(trial)
}
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 6650d51..94e1c63 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestTrialService.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestTrialService.scala
@@ -73,6 +73,18 @@ class RestTrialService(transport: ServiceTransport, baseUri: Uri)(implicit prote
}
}
+ def getHtmlSource(trialId: StringId[Trial])(
+ implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]
+ ): Future[Source[ByteString, NotUsed]] = {
+ val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/trial/$trialId/source.html"))
+ 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,
pagination: Option[Pagination] = None)(
@@ -146,4 +158,16 @@ class RestTrialService(transport: ServiceTransport, baseUri: Uri)(implicit prote
def unassign(origTrial: Trial)(
implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] =
singleAction(origTrial, "unassign")
+
+ override def addTrial(trial: TrialCreationRequest)(
+ implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[Trial] = {
+ for {
+ entity <- Marshal(trial).to[RequestEntity]
+ request = HttpRequest(HttpMethods.POST, endpointUri(baseUri, s"/v1/trial/${trial.nctId}")).withEntity(entity)
+ response <- transport.sendRequestGetResponse(requestContext)(request)
+ reply <- apiResponse[Trial](response)
+ } yield {
+ reply
+ }
+ }
}