diff options
author | vlad <vlad@driver.xyz> | 2018-01-25 14:12:31 -0800 |
---|---|---|
committer | vlad <vlad@driver.xyz> | 2018-01-25 14:12:31 -0800 |
commit | a0877d81ca2844d75dc361b5ce7c99afacd6e25f (patch) | |
tree | 8fe49f45cbcddbbb9a3d167099abe7aa2625e56b /src/main/scala/xyz/driver/pdsuidomain/services/rest | |
parent | 46a22e9ab324a0068a85952cdc809800f360f445 (diff) | |
download | rest-query-a0877d81ca2844d75dc361b5ce7c99afacd6e25f.tar.gz rest-query-a0877d81ca2844d75dc361b5ce7c99afacd6e25f.tar.bz2 rest-query-a0877d81ca2844d75dc361b5ce7c99afacd6e25f.zip |
Extracting query library
Diffstat (limited to 'src/main/scala/xyz/driver/pdsuidomain/services/rest')
19 files changed, 0 insertions, 1522 deletions
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestArmService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestArmService.scala deleted file mode 100644 index 87e2bab..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestArmService.scala +++ /dev/null @@ -1,85 +0,0 @@ -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 -import xyz.driver.core.rest.{Pagination => _, _} -import xyz.driver.entities.users.AuthUserInfo -import xyz.driver.pdsuicommon.db._ -import xyz.driver.pdsuicommon.domain._ -import xyz.driver.pdsuidomain.ListResponse -import xyz.driver.pdsuidomain.entities._ -import xyz.driver.pdsuidomain.services.ArmService - -class RestArmService(transport: ServiceTransport, baseUri: Uri)(implicit protected val materializer: Materializer, - protected val exec: ExecutionContext) - extends ArmService with RestHelper { - - import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._ - import xyz.driver.pdsuidomain.formats.json.listresponse._ - import xyz.driver.pdsuidomain.formats.json.arm._ - import xyz.driver.pdsuidomain.services.ArmService._ - - def getAll(filter: SearchFilterExpr = SearchFilterExpr.Empty, - sorting: Option[Sorting] = None, - pagination: Option[Pagination] = None)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetListReply] = { - val request = HttpRequest( - HttpMethods.GET, - endpointUri(baseUri, "/v1/arm", filterQuery(filter) ++ sortingQuery(sorting) ++ paginationQuery(pagination))) - for { - response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[ListResponse[Arm]](response) - } yield { - GetListReply.EntityList(reply.items, reply.meta.itemsCount) - } - } - - def getById(armId: LongId[Arm])( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetByIdReply] = { - val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/arm/$armId")) - for { - response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[Arm](response) - } yield { - GetByIdReply.Entity(reply) - } - } - - def create(draftArm: Arm)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[CreateReply] = { - for { - entity <- Marshal(draftArm).to[RequestEntity] - request = HttpRequest(HttpMethods.POST, endpointUri(baseUri, "/v1/arm")).withEntity(entity) - response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[Arm](response) - } yield { - CreateReply.Created(reply) - } - } - - def update(origArm: Arm, draftArm: Arm)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] = { - val id = origArm.id - val request = HttpRequest(HttpMethods.PATCH, endpointUri(baseUri, s"/v1/arm/$id")) - for { - response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[Arm](response) - } yield { - UpdateReply.Updated(reply) - } - } - - def delete(id: LongId[Arm])( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[DeleteReply] = { - val request = HttpRequest(HttpMethods.DELETE, endpointUri(baseUri, s"/v1/arm/$id")) - for { - response <- transport.sendRequestGetResponse(requestContext)(request) - _ <- apiResponse[HttpEntity](response) - } yield { - DeleteReply.Deleted - } - } - -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestCriterionService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestCriterionService.scala deleted file mode 100644 index 33be27e..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestCriterionService.scala +++ /dev/null @@ -1,88 +0,0 @@ -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 -import xyz.driver.core.rest.{Pagination => _, _} -import xyz.driver.entities.users.AuthUserInfo -import xyz.driver.pdsuicommon.db._ -import xyz.driver.pdsuicommon.domain._ -import xyz.driver.pdsuidomain.ListResponse -import xyz.driver.pdsuidomain.entities._ -import xyz.driver.pdsuidomain.services.CriterionService - -class RestCriterionService(transport: ServiceTransport, baseUri: Uri)( - implicit protected val materializer: Materializer, - protected val exec: ExecutionContext) - extends CriterionService with RestHelper { - - import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._ - import xyz.driver.pdsuidomain.formats.json.listresponse._ - import xyz.driver.pdsuidomain.formats.json.criterion._ - import xyz.driver.pdsuidomain.services.CriterionService._ - - def create(draftRichCriterion: RichCriterion)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[CreateReply] = { - for { - entity <- Marshal(draftRichCriterion).to[RequestEntity] - request = HttpRequest(HttpMethods.POST, endpointUri(baseUri, "/v1/criterion")).withEntity(entity) - response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[RichCriterion](response) - } yield { - CreateReply.Created(reply) - } - } - - def getById(id: LongId[Criterion])( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetByIdReply] = { - val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/criterion/$id")) - for { - response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[RichCriterion](response) - } yield { - GetByIdReply.Entity(reply) - } - } - - def getAll(filter: SearchFilterExpr = SearchFilterExpr.Empty, - sorting: Option[Sorting] = None, - pagination: Option[Pagination] = None)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetListReply] = { - val request = HttpRequest(HttpMethods.GET, - endpointUri(baseUri, - s"/v1/criterion", - filterQuery(filter) ++ sortingQuery(sorting) ++ paginationQuery(pagination))) - for { - response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[ListResponse[RichCriterion]](response) - } yield { - GetListReply.EntityList(reply.items, reply.meta.itemsCount, reply.meta.lastUpdate) - } - } - - def update(origRichCriterion: RichCriterion, draftRichCriterion: RichCriterion)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] = { - val id = origRichCriterion.criterion.id - for { - entity <- Marshal(draftRichCriterion).to[RequestEntity] - request = HttpRequest(HttpMethods.PATCH, endpointUri(baseUri, s"/v1/criterion/$id")).withEntity(entity) - response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[RichCriterion](response) - } yield { - UpdateReply.Updated(reply) - } - } - - def delete(id: LongId[Criterion])( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[DeleteReply] = { - val request = HttpRequest(HttpMethods.DELETE, endpointUri(baseUri, s"/v1/criterion/$id")) - for { - response <- transport.sendRequestGetResponse(requestContext)(request) - _ <- apiResponse[HttpEntity](response) - } yield { - DeleteReply.Deleted - } - } - -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestDocumentService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestDocumentService.scala deleted file mode 100644 index bfe5e8f..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestDocumentService.scala +++ /dev/null @@ -1,121 +0,0 @@ -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 -import xyz.driver.core.rest.{Pagination => _, _} -import xyz.driver.entities.users.AuthUserInfo -import xyz.driver.pdsuicommon.db._ -import xyz.driver.pdsuicommon.domain._ -import xyz.driver.pdsuidomain.ListResponse -import xyz.driver.pdsuidomain.entities._ -import xyz.driver.pdsuidomain.services.DocumentService - -class RestDocumentService(transport: ServiceTransport, baseUri: Uri)(implicit protected val materializer: Materializer, - protected val exec: ExecutionContext) - extends DocumentService with RestHelper { - - import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._ - import xyz.driver.pdsuidomain.formats.json.listresponse._ - import xyz.driver.pdsuidomain.formats.json.document._ - import xyz.driver.pdsuidomain.services.DocumentService._ - - def getById(id: LongId[Document])( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetByIdReply] = { - val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/document/$id")) - for { - response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[Document](response) - } yield { - GetByIdReply.Entity(reply) - } - } - - def getAll(filter: SearchFilterExpr = SearchFilterExpr.Empty, - sorting: Option[Sorting] = None, - pagination: Option[Pagination] = None)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetListReply] = { - - val request = HttpRequest(HttpMethods.GET, - endpointUri(baseUri, - "/v1/document", - filterQuery(filter) ++ sortingQuery(sorting) ++ paginationQuery(pagination))) - for { - response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[ListResponse[Document]](response) - } yield { - GetListReply.EntityList(reply.items, reply.meta.itemsCount, reply.meta.lastUpdate) - } - } - - def create(draftDocument: Document)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[CreateReply] = { - for { - entity <- Marshal(draftDocument).to[RequestEntity] - request = HttpRequest(HttpMethods.POST, endpointUri(baseUri, "/v1/document")).withEntity(entity) - response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[Document](response) - } yield { - CreateReply.Created(reply) - } - } - - def update(orig: Document, draft: Document)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] = { - for { - entity <- Marshal(draft).to[RequestEntity] - request = HttpRequest(HttpMethods.PATCH, endpointUri(baseUri, s"/v1/document/${orig.id}")).withEntity(entity) - response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[Document](response) - } yield { - UpdateReply.Updated(reply) - } - } - - def delete(id: LongId[Document])( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[DeleteReply] = { - val request = HttpRequest(HttpMethods.DELETE, endpointUri(baseUri, s"/v1/document/$id")) - for { - response <- transport.sendRequestGetResponse(requestContext)(request) - _ <- apiResponse[HttpEntity](response) - } yield { - DeleteReply.Deleted - } - } - - private def editAction(orig: Document, action: String)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] = { - val id = orig.id.toString - val request = HttpRequest(HttpMethods.POST, endpointUri(baseUri, s"/v1/document/$id/$action")) - for { - response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[Document](response) - } yield { - UpdateReply.Updated(reply) - } - } - - def start(orig: Document)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] = - editAction(orig, "start") - def submit(orig: Document)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] = - editAction(orig, "submit") - def restart(orig: Document)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] = - editAction(orig, "restart") - def flag(orig: Document)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] = - editAction(orig, "flag") - def resolve(orig: Document)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] = - editAction(orig, "resolve") - def unassign(orig: Document)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] = - editAction(orig, "unassign") - def archive(orig: Document)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] = - editAction(orig, "archive") - -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestDocumentTypeService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestDocumentTypeService.scala deleted file mode 100644 index 6157cc3..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestDocumentTypeService.scala +++ /dev/null @@ -1,33 +0,0 @@ -package xyz.driver.pdsuidomain.services.rest - -import scala.concurrent.{ExecutionContext, Future} -import akka.http.scaladsl.model._ -import akka.stream.Materializer -import xyz.driver.core.rest.{Pagination => _, _} -import xyz.driver.entities.users.AuthUserInfo -import xyz.driver.pdsuicommon.db._ -import xyz.driver.pdsuidomain.ListResponse -import xyz.driver.pdsuidomain.entities.DocumentType -import xyz.driver.pdsuidomain.services.DocumentTypeService - -class RestDocumentTypeService(transport: ServiceTransport, baseUri: Uri)( - implicit protected val materializer: Materializer, - protected val exec: ExecutionContext) - extends DocumentTypeService with RestHelper { - - import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._ - import xyz.driver.pdsuidomain.formats.json.listresponse._ - import xyz.driver.pdsuidomain.formats.json.document.documentTypeFormat - import xyz.driver.pdsuidomain.services.DocumentTypeService._ - - def getAll(sorting: Option[Sorting] = None)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetListReply] = { - val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, "/v1/document-type", sortingQuery(sorting))) - for { - response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[ListResponse[DocumentType]](response) - } yield { - GetListReply.EntityList(reply.items, reply.meta.itemsCount) - } - } -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestEligibilitySnapshotService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestEligibilitySnapshotService.scala deleted file mode 100644 index 2187ec2..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestEligibilitySnapshotService.scala +++ /dev/null @@ -1,34 +0,0 @@ -package xyz.driver.pdsuidomain.services.rest - -import akka.http.scaladsl.model.{HttpMethods, HttpRequest, Uri} -import akka.stream.Materializer -import xyz.driver.core.rest.{AuthorizedServiceRequestContext, ServiceTransport} -import xyz.driver.entities.users.AuthUserInfo -import xyz.driver.pdsuicommon.domain.UuidId -import xyz.driver.pdsuidomain.entities.eligibility.EligibleTrial -import xyz.driver.pdsuidomain.entities.{Patient, eligibility} -import xyz.driver.pdsuidomain.services.EligibilitySnapshotService - -import scala.concurrent.{ExecutionContext, Future} - -class RestEligibilitySnapshotService(transport: ServiceTransport, baseUrl: Uri)( - implicit protected val materializer: Materializer, - protected val exec: ExecutionContext) extends EligibilitySnapshotService with RestHelper { - - import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._ - import spray.json.DefaultJsonProtocol._ - import xyz.driver.pdsuidomain.formats.json.eligibility._ - - override def eligibilitySnapshot(patientId: UuidId[Patient]) - (implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): - Future[Seq[eligibility.EligibleTrial]] = { - val request = HttpRequest(HttpMethods.GET, endpointUri(baseUrl, s"/v1/patient/$patientId/eligibilitySnapshot")) - for { - response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[Seq[EligibleTrial]](response) - } yield { - reply - } - } - -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestEligibilityVerificationService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestEligibilityVerificationService.scala deleted file mode 100644 index e057c55..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestEligibilityVerificationService.scala +++ /dev/null @@ -1,53 +0,0 @@ -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.pdsuicommon.domain.LongId -import xyz.driver.pdsuidomain.entities.eligibility.{MatchedPatient, MismatchRankedLabels} -import xyz.driver.pdsuidomain.entities.{EligibilityArm, 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.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[LongId[EligibilityArm]])( - implicit ctx: AuthorizedServiceRequestContext[AuthUserInfo]): Future[eligibility.MismatchRankedLabels] = { - - val query = Seq("disease" -> cancerType.toString.toUpperCase) ++ (if (excludedArms.nonEmpty) { - Seq( - "ineligible_arms" -> excludedArms - .map(_.id) - .mkString(",")) - } else { - Seq.empty[(String, String)] - }) - - 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 deleted file mode 100644 index 24c5436..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestExtractedDataService.scala +++ /dev/null @@ -1,100 +0,0 @@ -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 -import xyz.driver.core.rest.{Pagination => _, _} -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.services.ExtractedDataService -import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._ -import xyz.driver.entities.users.AuthUserInfo -import xyz.driver.pdsuidomain.ListResponse -import xyz.driver.pdsuidomain.formats.json.export._ - -class RestExtractedDataService(transport: ServiceTransport, baseUri: Uri)( - implicit protected val materializer: Materializer, - protected val exec: ExecutionContext) - extends ExtractedDataService with RestHelper { - - import xyz.driver.pdsuidomain.formats.json.listresponse._ - import xyz.driver.pdsuidomain.formats.json.extracteddata._ - import xyz.driver.pdsuidomain.services.ExtractedDataService._ - - def getById(id: LongId[ExtractedData])( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetByIdReply] = { - val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/extracted-data/$id")) - for { - response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[RichExtractedData](response) - } yield { - GetByIdReply.Entity(reply) - } - } - - def getAll(filter: SearchFilterExpr = SearchFilterExpr.Empty, - sorting: Option[Sorting] = None, - pagination: Option[Pagination] = None)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetListReply] = { - val request = HttpRequest(HttpMethods.GET, - endpointUri(baseUri, - "/v1/extracted-data", - filterQuery(filter) ++ sortingQuery(sorting) ++ paginationQuery(pagination))) - for { - response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[ListResponse[RichExtractedData]](response) - } yield { - GetListReply.EntityList(reply.items, reply.meta.itemsCount) - } - } - - def create(draftRichExtractedData: RichExtractedData)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[CreateReply] = { - for { - entity <- Marshal(draftRichExtractedData).to[RequestEntity] - request = HttpRequest(HttpMethods.POST, endpointUri(baseUri, "/v1/extracted-data")).withEntity(entity) - response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[RichExtractedData](response) - } yield { - CreateReply.Created(reply) - } - } - def update(origRichExtractedData: RichExtractedData, draftRichExtractedData: RichExtractedData)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] = { - val id = origRichExtractedData.extractedData.id - for { - entity <- Marshal(draftRichExtractedData).to[RequestEntity] - request = HttpRequest(HttpMethods.PATCH, endpointUri(baseUri, s"/v1/extracted-data/$id")).withEntity(entity) - response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[RichExtractedData](response) - } yield { - UpdateReply.Updated(reply) - } - } - - def delete(id: LongId[ExtractedData])( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[DeleteReply] = { - val request = HttpRequest(HttpMethods.DELETE, endpointUri(baseUri, s"/v1/export-data/$id")) - for { - response <- transport.sendRequestGetResponse(requestContext)(request) - _ <- apiResponse[HttpEntity](response) - } yield { - DeleteReply.Deleted - } - } - - def getPatientLabels(id: UuidId[Patient])( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetPatientLabelsReply] = { - val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/export/patient/$id")) - for { - response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[ExportPatientWithLabels](response) - } yield { - GetPatientLabelsReply.Entity(reply) - } - } - -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestHelper.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestHelper.scala deleted file mode 100644 index 8ed2651..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestHelper.scala +++ /dev/null @@ -1,107 +0,0 @@ -package xyz.driver.pdsuidomain.services.rest - -import scala.concurrent.{ExecutionContext, Future} -import akka.http.scaladsl.model.{HttpResponse, ResponseEntity, StatusCodes, Uri} -import akka.http.scaladsl.unmarshalling.{Unmarshal, Unmarshaller} -import akka.stream.Materializer -import xyz.driver.core.rest.errors.{InvalidActionException, InvalidInputException, ResourceNotFoundException} -import xyz.driver.pdsuicommon.db.{Pagination, SearchFilterBinaryOperation, SearchFilterExpr, SearchFilterNAryOperation, Sorting, SortingOrder} -import xyz.driver.pdsuicommon.error._ - -trait RestHelper { - import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._ - import ErrorsResponse._ - - implicit protected val materializer: Materializer - implicit protected val exec: ExecutionContext - - protected def endpointUri(baseUri: Uri, path: String) = - baseUri.withPath(Uri.Path(path)) - - protected def endpointUri(baseUri: Uri, path: String, query: Seq[(String, String)]) = - baseUri.withPath(Uri.Path(path)).withQuery(Uri.Query(query: _*)) - - def sortingQuery(sorting: Option[Sorting]): Seq[(String, String)] = { - def dimensionQuery(dimension: Sorting.Dimension) = { - val ord = dimension.order match { - case SortingOrder.Ascending => "" - case SortingOrder.Descending => "-" - } - s"$ord${dimension.name}" - } - - sorting match { - case None => Seq.empty - case Some(dimension: Sorting.Dimension) => Seq("sort" -> dimensionQuery(dimension)) - case Some(Sorting.Sequential(dimensions)) => Seq("sort" -> dimensions.map(dimensionQuery).mkString(",")) - } - } - - def filterQuery(expr: SearchFilterExpr): Seq[(String, String)] = { - def opToString(op: SearchFilterBinaryOperation) = op match { - case SearchFilterBinaryOperation.Eq => "eq" - case SearchFilterBinaryOperation.NotEq => "ne" - case SearchFilterBinaryOperation.Like => "like" - case SearchFilterBinaryOperation.Gt => "gt" - case SearchFilterBinaryOperation.GtEq => "ge" - case SearchFilterBinaryOperation.Lt => "lt" - case SearchFilterBinaryOperation.LtEq => "le" - } - - def exprToQuery(expr: SearchFilterExpr): Seq[(String, String)] = expr match { - case SearchFilterExpr.Empty => Seq.empty - case SearchFilterExpr.Atom.Binary(dimension, op, value) => - Seq("filters" -> s"${dimension.tableName.fold("")(t => s"$t.") + dimension.name} ${opToString(op)} $value") - case SearchFilterExpr.Atom.NAry(dimension, SearchFilterNAryOperation.In, values) => - Seq("filters" -> s"${dimension.tableName.fold("")(t => s"$t.") + dimension.name} in ${values.mkString(",")}") - case SearchFilterExpr.Intersection(ops) => - ops.flatMap(op => exprToQuery(op)) - case expr => sys.error(s"No parser available for filter expression $expr.") - } - - exprToQuery(expr) - } - - def paginationQuery(pagination: Option[Pagination]): Seq[(String, String)] = pagination match { - case None => Seq.empty - case Some(pp) => - Seq( - "pageNumber" -> pp.pageNumber.toString, - "pageSize" -> pp.pageSize.toString - ) - } - - /** Utility method to parse responses from records-acquisition-server. - * - * Non-2xx HTTP error codes will be cause the returned future to fail with a corresponding - * `DomainException`. - * @tparam ApiReply The type of the serialized reply object, contained in the HTTP entity - * @param response The HTTP response to parse. - * @param unmarshaller An unmarshaller that converts a successful response to an api reply. - */ - def apiResponse[ApiReply](response: HttpResponse)( - implicit unmarshaller: Unmarshaller[ResponseEntity, ApiReply]): Future[ApiReply] = { - - def extractErrorMessage(response: HttpResponse): Future[String] = { - Unmarshal(response.entity) - .to[ErrorsResponse] - .transform( - response => response.errors.map(_.message).mkString(", "), - ex => InvalidInputException(s"Response has invalid format: ${ex.getMessage}") - ) - } - - if (response.status.isSuccess) { - Unmarshal(response.entity).to[ApiReply] - } else { - extractErrorMessage(response).flatMap { message => - Future.failed(response.status match { - case StatusCodes.Forbidden => InvalidActionException(message) - case StatusCodes.NotFound => ResourceNotFoundException(message) - case other => - InvalidInputException(s"Unhandled domain error for HTTP status ${other.value}. $message") - }) - } - } - } -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestHypothesisService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestHypothesisService.scala deleted file mode 100644 index 11adb8f..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestHypothesisService.scala +++ /dev/null @@ -1,60 +0,0 @@ -package xyz.driver.pdsuidomain.services.rest - -import akka.http.scaladsl.marshalling.Marshal - -import scala.concurrent.{ExecutionContext, Future} -import akka.http.scaladsl.model._ -import akka.stream.Materializer -import xyz.driver.core.rest._ -import xyz.driver.entities.users.AuthUserInfo -import xyz.driver.pdsuicommon.db._ -import xyz.driver.pdsuicommon.domain.UuidId -import xyz.driver.pdsuidomain.ListResponse -import xyz.driver.pdsuidomain.entities.Hypothesis -import xyz.driver.pdsuidomain.services.HypothesisService - -class RestHypothesisService(transport: ServiceTransport, baseUri: Uri)( - implicit protected val materializer: Materializer, - protected val exec: ExecutionContext) - extends HypothesisService with RestHelper { - - import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._ - import xyz.driver.pdsuidomain.formats.json.listresponse._ - import xyz.driver.pdsuidomain.formats.json.hypothesis._ - import xyz.driver.pdsuidomain.services.HypothesisService._ - - def getAll(sorting: Option[Sorting] = None)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetListReply] = { - val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, "/v1/hypothesis", sortingQuery(sorting))) - for { - response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[ListResponse[Hypothesis]](response) - } yield { - GetListReply.EntityList(reply.items, reply.meta.itemsCount) - } - } - - def create(draftHypothesis: Hypothesis)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[CreateReply] = { - for { - entity <- Marshal(draftHypothesis).to[RequestEntity] - request = HttpRequest(HttpMethods.POST, endpointUri(baseUri, "/v1/hypothesis")).withEntity(entity) - response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[Hypothesis](response) - } yield { - CreateReply.Created(reply) - } - } - - def delete(id: UuidId[Hypothesis])( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[DeleteReply] = { - val request = HttpRequest(HttpMethods.DELETE, endpointUri(baseUri, s"/v1/hypothesis/$id")) - for { - response <- transport.sendRequestGetResponse(requestContext)(request) - _ <- apiResponse[HttpEntity](response) - } yield { - DeleteReply.Deleted - } - } - -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestInterventionService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestInterventionService.scala deleted file mode 100644 index c4add4a..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestInterventionService.scala +++ /dev/null @@ -1,88 +0,0 @@ -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 -import xyz.driver.core.rest.{Pagination => _, _} -import xyz.driver.entities.users.AuthUserInfo -import xyz.driver.pdsuicommon.db._ -import xyz.driver.pdsuicommon.domain._ -import xyz.driver.pdsuidomain.ListResponse -import xyz.driver.pdsuidomain.entities._ -import xyz.driver.pdsuidomain.services.InterventionService - -class RestInterventionService(transport: ServiceTransport, baseUri: Uri)( - implicit protected val materializer: Materializer, - protected val exec: ExecutionContext) - extends InterventionService with RestHelper { - - import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._ - import xyz.driver.pdsuidomain.formats.json.listresponse._ - import xyz.driver.pdsuidomain.formats.json.intervention._ - import xyz.driver.pdsuidomain.services.InterventionService._ - - def getAll(filter: SearchFilterExpr = SearchFilterExpr.Empty, - sorting: Option[Sorting] = None, - pagination: Option[Pagination] = None)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetListReply] = { - val request = HttpRequest(HttpMethods.GET, - endpointUri(baseUri, - "/v1/intervention", - filterQuery(filter) ++ sortingQuery(sorting) ++ paginationQuery(pagination))) - for { - response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[ListResponse[InterventionWithArms]](response) - } yield { - GetListReply.EntityList(reply.items, reply.meta.itemsCount) - } - } - - def getById(id: LongId[Intervention])( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetByIdReply] = { - val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/intervention/$id")) - for { - response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[InterventionWithArms](response) - } yield { - GetByIdReply.Entity(reply) - } - } - - def update(origIntervention: InterventionWithArms, draftIntervention: InterventionWithArms)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] = { - val id = origIntervention.intervention.id - for { - entity <- Marshal(draftIntervention).to[RequestEntity] - request = HttpRequest(HttpMethods.PATCH, endpointUri(baseUri, s"/v1/intervention/$id")).withEntity(entity) - response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[InterventionWithArms](response) - } yield { - UpdateReply.Updated(reply) - } - } - - def create(draftIntervention: InterventionWithArms)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[CreateReply] = { - for { - entity <- Marshal(draftIntervention).to[RequestEntity] - request = HttpRequest(HttpMethods.POST, endpointUri(baseUri, "/v1/intervention")).withEntity(entity) - response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[InterventionWithArms](response) - } yield { - CreateReply.Created(reply) - } - } - - def delete(id: LongId[Intervention])( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[DeleteReply] = { - val request = HttpRequest(HttpMethods.DELETE, endpointUri(baseUri, s"/v1/intervention/$id")) - for { - response <- transport.sendRequestGetResponse(requestContext)(request) - _ <- apiResponse[HttpEntity](response) - } yield { - DeleteReply.Deleted - } - } - -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestInterventionTypeService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestInterventionTypeService.scala deleted file mode 100644 index 825b936..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestInterventionTypeService.scala +++ /dev/null @@ -1,37 +0,0 @@ -package xyz.driver.pdsuidomain.services.rest - -import scala.concurrent.{ExecutionContext, Future} -import akka.http.scaladsl.model._ -import akka.stream.Materializer -import xyz.driver.core.rest._ -import xyz.driver.entities.users.AuthUserInfo -import xyz.driver.pdsuicommon.db._ -import xyz.driver.pdsuidomain.ListResponse -import xyz.driver.pdsuidomain.entities.InterventionType -import xyz.driver.pdsuidomain.services.InterventionTypeService - -class RestInterventionTypeService(transport: ServiceTransport, baseUri: Uri)( - implicit protected val materializer: Materializer, - protected val exec: ExecutionContext) - extends InterventionTypeService with RestHelper { - - import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._ - import xyz.driver.pdsuidomain.formats.json.listresponse._ - import xyz.driver.pdsuidomain.formats.json.intervention.interventionTypeFormat - import xyz.driver.pdsuidomain.services.InterventionTypeService._ - - def getAll(sorting: Option[Sorting] = None)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetListReply] = { - val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, "/v1/intervention-type", sortingQuery(sorting))) - for { - response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[ListResponse[InterventionType]](response) - } yield { - { - val domain = reply.items - GetListReply.EntityList(domain.toList, reply.meta.itemsCount) - } - } - } - -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestMedicalRecordService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestMedicalRecordService.scala deleted file mode 100644 index 6af6707..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestMedicalRecordService.scala +++ /dev/null @@ -1,129 +0,0 @@ -package xyz.driver.pdsuidomain.services.rest - -import akka.NotUsed -import akka.stream.scaladsl.Source -import akka.util.ByteString - -import scala.concurrent.{ExecutionContext, Future} -import akka.http.scaladsl.marshalling.Marshal -import akka.http.scaladsl.model._ -import akka.stream.Materializer -import xyz.driver.core.rest.{Pagination => _, _} -import xyz.driver.entities.users.AuthUserInfo -import xyz.driver.pdsuicommon.db._ -import xyz.driver.pdsuicommon.domain._ -import xyz.driver.pdsuidomain.ListResponse -import xyz.driver.pdsuidomain.entities._ -import xyz.driver.pdsuidomain.services.MedicalRecordService - -class RestMedicalRecordService(transport: ServiceTransport, baseUri: Uri)( - implicit protected val materializer: Materializer, - protected val exec: ExecutionContext) - extends MedicalRecordService with RestHelper { - - import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._ - import xyz.driver.pdsuidomain.formats.json.listresponse._ - import xyz.driver.pdsuidomain.formats.json.record._ - import xyz.driver.pdsuidomain.services.MedicalRecordService._ - - def getById(recordId: LongId[MedicalRecord])( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetByIdReply] = { - val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/record/$recordId")) - for { - response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[MedicalRecord](response) - } yield { - GetByIdReply.Entity(reply) - } - } - - def getPdfSource(recordId: LongId[MedicalRecord])( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo] - ): Future[Source[ByteString, NotUsed]] = { - - val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/record/$recordId/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, - pagination: Option[Pagination] = None)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetListReply] = { - - val request = HttpRequest( - HttpMethods.GET, - endpointUri(baseUri, "/v1/record", filterQuery(filter) ++ sortingQuery(sorting) ++ paginationQuery(pagination))) - for { - response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[ListResponse[MedicalRecord]](response) - } yield { - GetListReply.EntityList(reply.items, reply.meta.itemsCount, reply.meta.lastUpdate) - } - } - - def create(draftRecord: MedicalRecord)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[CreateReply] = { - for { - entity <- Marshal(draftRecord).to[RequestEntity] - request = HttpRequest(HttpMethods.POST, endpointUri(baseUri, "/v1/record")).withEntity(entity) - response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[MedicalRecord](response) - } yield { - CreateReply.Created(reply) - } - } - - def update(origRecord: MedicalRecord, draftRecord: MedicalRecord)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] = { - val id = origRecord.id.toString - for { - entity <- Marshal(draftRecord).to[RequestEntity] - request = HttpRequest(HttpMethods.PATCH, endpointUri(baseUri, s"/v1/record/$id")).withEntity(entity) - response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[MedicalRecord](response) - } yield { - UpdateReply.Updated(reply) - } - } - - private def editAction(orig: MedicalRecord, action: String)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] = { - val id = orig.id.toString - val request = HttpRequest(HttpMethods.POST, endpointUri(baseUri, s"/v1/record/$id/$action")) - for { - response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[MedicalRecord](response) - } yield { - UpdateReply.Updated(reply) - } - } - - def start(orig: MedicalRecord)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] = - editAction(orig, "start") - def submit(orig: MedicalRecord)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] = - editAction(orig, "submit") - def restart(orig: MedicalRecord)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] = - editAction(orig, "restart") - def flag(orig: MedicalRecord)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] = - editAction(orig, "flag") - def resolve(orig: MedicalRecord)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] = - editAction(orig, "resolve") - def unassign(orig: MedicalRecord)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] = - editAction(orig, "unassign") - def archive(orig: MedicalRecord)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] = - editAction(orig, "archive") - -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestPatientCriterionService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestPatientCriterionService.scala deleted file mode 100644 index cc66142..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestPatientCriterionService.scala +++ /dev/null @@ -1,81 +0,0 @@ -package xyz.driver.pdsuidomain.services.rest - -import akka.http.scaladsl.marshalling.Marshal -import akka.http.scaladsl.model._ -import akka.stream.Materializer -import xyz.driver.core.rest.{Pagination => _, _} -import xyz.driver.entities.users.AuthUserInfo -import xyz.driver.pdsuicommon.db.{Pagination, _} -import xyz.driver.pdsuicommon.domain._ -import xyz.driver.pdsuidomain.ListResponse -import xyz.driver.pdsuidomain.entities._ -import xyz.driver.pdsuidomain.services.PatientCriterionService - -import scala.concurrent.{ExecutionContext, Future} - -class RestPatientCriterionService(transport: ServiceTransport, baseUri: Uri)( - implicit protected val materializer: Materializer, - protected val exec: ExecutionContext) - extends PatientCriterionService with RestHelper { - - import spray.json.DefaultJsonProtocol._ - import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._ - import xyz.driver.pdsuidomain.formats.json.patientcriterion._ - import xyz.driver.pdsuidomain.formats.json.listresponse._ - - def getAll(patientId: UuidId[Patient], - filter: SearchFilterExpr = SearchFilterExpr.Empty, - sorting: Option[Sorting] = None, - pagination: Pagination = Pagination.Default)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[ListResponse[RichPatientCriterion]] = { - val request = HttpRequest(HttpMethods.GET, - endpointUri(baseUri, - s"/v1/patient/$patientId/criterion", - filterQuery(filter) ++ sortingQuery(sorting) ++ paginationQuery(Some(pagination)))) - for { - response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[ListResponse[RichPatientCriterion]](response) - } yield { - reply - } - } - - def getById(patientId: UuidId[Patient], id: LongId[PatientCriterion])( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[Option[RichPatientCriterion]] = { - val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/patient/$patientId/criterion/$id")) - for { - response <- transport.sendRequestGetResponse(requestContext)(request) - entity <- apiResponse[RichPatientCriterion](response) - } yield { - Option(entity) - } - } - - def updateList(patientId: UuidId[Patient], draftEntities: List[DraftPatientCriterion])( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[Unit] = { - for { - entity <- Marshal(draftEntities).to[RequestEntity] - request = HttpRequest(HttpMethods.PATCH, endpointUri(baseUri, s"/v1/patient/$patientId/criterion")) - .withEntity(entity) - response <- transport.sendRequestGetResponse(requestContext)(request) - _ <- apiResponse[RichPatientCriterion](response) - } yield { - () - } - } - - def update(origEntity: PatientCriterion, draftEntity: PatientCriterion, patientId: UuidId[Patient])( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[RichPatientCriterion] = { - for { - entity <- Marshal(draftEntity).to[RequestEntity] - request = HttpRequest( - HttpMethods.PATCH, - endpointUri(baseUri, s"/v1/patient/$patientId/criterion/${origEntity.criterionId}")).withEntity(entity) - response <- transport.sendRequestGetResponse(requestContext)(request) - entity <- apiResponse[RichPatientCriterion](response) - } yield { - entity - } - } - -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestPatientLabelService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestPatientLabelService.scala deleted file mode 100644 index 932e123..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestPatientLabelService.scala +++ /dev/null @@ -1,84 +0,0 @@ -package xyz.driver.pdsuidomain.services.rest - -import akka.http.scaladsl.marshalling.Marshal -import akka.http.scaladsl.model._ -import akka.stream.Materializer -import xyz.driver.core.rest.{Pagination => _, _} -import xyz.driver.entities.labels.Label -import xyz.driver.entities.users.AuthUserInfo -import xyz.driver.pdsuicommon.db.{Pagination, _} -import xyz.driver.pdsuicommon.domain._ -import xyz.driver.pdsuidomain.ListResponse -import xyz.driver.pdsuidomain.entities._ -import xyz.driver.pdsuidomain.services.PatientLabelService - -import scala.concurrent.{ExecutionContext, Future} - -class RestPatientLabelService(transport: ServiceTransport, baseUri: Uri)( - implicit protected val materializer: Materializer, - protected val exec: ExecutionContext) - extends PatientLabelService with RestHelper { - - import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._ - import xyz.driver.pdsuidomain.formats.json.listresponse._ - import xyz.driver.pdsuidomain.formats.json.patientlabel._ - - def getAll(patientId: UuidId[Patient], - filter: SearchFilterExpr = SearchFilterExpr.Empty, - sorting: Option[Sorting] = None, - pagination: Pagination = Pagination.Default)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[ListResponse[RichPatientLabel]] = { - val request = HttpRequest(HttpMethods.GET, - endpointUri(baseUri, - s"/v1/patient/$patientId/label", - filterQuery(filter) ++ sortingQuery(sorting) ++ paginationQuery(Some(pagination)))) - for { - response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[ListResponse[RichPatientLabel]](response) - } yield { - reply - } - } - - def getDefiningCriteriaList(patientId: UuidId[Patient], - hypothesisId: UuidId[Hypothesis], - pagination: Pagination = Pagination.Default)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo] - ): Future[ListResponse[PatientLabel]] = { - val request = HttpRequest(HttpMethods.GET, - endpointUri(baseUri, s"/patient/$patientId/hypothesis", paginationQuery(Some(pagination)))) - for { - response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[ListResponse[PatientLabel]](response) - } yield { - reply - } - } - - def getByLabelIdOfPatient(patientId: UuidId[Patient], labelId: LongId[Label])( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[Option[RichPatientLabel]] = { - val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/patient/$patientId/label/$labelId")) - for { - response <- transport.sendRequestGetResponse(requestContext)(request) - entity <- apiResponse[RichPatientLabel](response) - } yield { - Option(entity) - } - } - - def update(origPatientLabel: PatientLabel, draftPatientLabel: PatientLabel)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[RichPatientLabel] = { - for { - entity <- Marshal(draftPatientLabel).to[RequestEntity] - request = HttpRequest( - HttpMethods.PATCH, - endpointUri(baseUri, s"/v1/patient/${origPatientLabel.patientId}/label/${origPatientLabel.labelId}")) - .withEntity(entity) - response <- transport.sendRequestGetResponse(requestContext)(request) - entity <- apiResponse[RichPatientLabel](response) - } yield { - entity - } - } - -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestPatientService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestPatientService.scala deleted file mode 100644 index 67f4e38..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestPatientService.scala +++ /dev/null @@ -1,78 +0,0 @@ -package xyz.driver.pdsuidomain.services.rest - -import scala.concurrent.{ExecutionContext, Future} -import akka.http.scaladsl.model._ -import akka.stream.Materializer -import xyz.driver.core.rest.{Pagination => _, _} -import xyz.driver.entities.users.AuthUserInfo -import xyz.driver.pdsuicommon.db.{Pagination, _} -import xyz.driver.pdsuicommon.domain._ -import xyz.driver.pdsuidomain.ListResponse -import xyz.driver.pdsuidomain.entities._ -import xyz.driver.pdsuidomain.services.PatientService - -class RestPatientService(transport: ServiceTransport, baseUri: Uri)(implicit protected val materializer: Materializer, - protected val exec: ExecutionContext) - extends PatientService with RestHelper { - - import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._ - import xyz.driver.pdsuidomain.formats.json.listresponse._ - import xyz.driver.pdsuidomain.formats.json.patient._ - - def getById(id: UuidId[Patient])( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[Option[Patient]] = { - val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/patient/$id")) - for { - response <- transport.sendRequestGetResponse(requestContext)(request) - entity <- apiResponse[Patient](response) - } yield { - Option(entity) - } - } - - def getAll(filter: SearchFilterExpr = SearchFilterExpr.Empty, - sorting: Option[Sorting] = None, - pagination: Pagination = Pagination.Default)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[ListResponse[Patient]] = { - val request = HttpRequest( - HttpMethods.GET, - endpointUri(baseUri, "/v1/patient", filterQuery(filter) ++ sortingQuery(sorting) ++ paginationQuery(Some(pagination)))) - for { - response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[ListResponse[Patient]](response) - } yield { - reply - } - } - - private def editAction(orig: Patient, action: String)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[Patient] = { - val id = orig.id.toString - val request = HttpRequest(HttpMethods.POST, endpointUri(baseUri, s"/v1/patient/$id/$action")) - for { - response <- transport.sendRequestGetResponse(requestContext)(request) - entity <- apiResponse[Patient](response) - } yield { - entity - } - } - - def unassign(origPatient: Patient)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[Patient] = - editAction(origPatient, "unassign") - def start(origPatient: Patient)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[Patient] = - editAction(origPatient, "start") - def submit(origPatient: Patient)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[Patient] = - editAction(origPatient, "submit") - def restart(origPatient: Patient)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[Patient] = - editAction(origPatient, "restart") - def flag(origPatient: Patient)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[Patient] = - editAction(origPatient, "flag") - def resolve(origPatient: Patient)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[Patient] = - editAction(origPatient, "resolve") -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestProviderTypeService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestProviderTypeService.scala deleted file mode 100644 index ffde086..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestProviderTypeService.scala +++ /dev/null @@ -1,34 +0,0 @@ -package xyz.driver.pdsuidomain.services.rest - -import scala.concurrent.{ExecutionContext, Future} -import akka.http.scaladsl.model._ -import akka.stream.Materializer -import xyz.driver.core.rest.{Pagination => _, _} -import xyz.driver.entities.users.AuthUserInfo -import xyz.driver.pdsuicommon.db._ -import xyz.driver.pdsuidomain.ListResponse -import xyz.driver.pdsuidomain.entities.ProviderType -import xyz.driver.pdsuidomain.services.ProviderTypeService - -class RestProviderTypeService(transport: ServiceTransport, baseUri: Uri)( - implicit protected val materializer: Materializer, - protected val exec: ExecutionContext) - extends ProviderTypeService with RestHelper { - - import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._ - import xyz.driver.pdsuidomain.formats.json.listresponse._ - import xyz.driver.pdsuidomain.formats.json.record.providerTypeFormat - import xyz.driver.pdsuidomain.services.ProviderTypeService._ - - def getAll(sorting: Option[Sorting] = None)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetListReply] = { - val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, "/v1/provider-type", sortingQuery(sorting))) - for { - response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[ListResponse[ProviderType]](response) - } yield { - GetListReply.EntityList(reply.items, reply.meta.itemsCount) - } - } - -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestStudyDesignService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestStudyDesignService.scala deleted file mode 100644 index f8ce502..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestStudyDesignService.scala +++ /dev/null @@ -1,34 +0,0 @@ -package xyz.driver.pdsuidomain.services.rest - -import scala.concurrent.{ExecutionContext, Future} -import akka.http.scaladsl.model._ -import akka.stream.Materializer -import xyz.driver.core.rest._ -import xyz.driver.entities.users.AuthUserInfo -import xyz.driver.pdsuicommon.db._ -import xyz.driver.pdsuidomain.ListResponse -import xyz.driver.pdsuidomain.entities.StudyDesign -import xyz.driver.pdsuidomain.services.StudyDesignService - -class RestStudyDesignService(transport: ServiceTransport, baseUri: Uri)( - implicit protected val materializer: Materializer, - protected val exec: ExecutionContext) - extends StudyDesignService with RestHelper { - - import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._ - import xyz.driver.pdsuidomain.formats.json.listresponse._ - import xyz.driver.pdsuidomain.formats.json.studydesign._ - import xyz.driver.pdsuidomain.services.StudyDesignService._ - - def getAll(sorting: Option[Sorting] = None)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetListReply] = { - val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, "/v1/study-design", sortingQuery(sorting))) - for { - response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[ListResponse[StudyDesign]](response) - } yield { - GetListReply.EntityList(reply.items, reply.meta.itemsCount) - } - } - -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestTrialIssueService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestTrialIssueService.scala deleted file mode 100644 index b14d35b..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestTrialIssueService.scala +++ /dev/null @@ -1,103 +0,0 @@ -package xyz.driver.pdsuidomain.services.rest - -import akka.http.scaladsl.marshalling.Marshal -import akka.http.scaladsl.model._ -import akka.stream.Materializer -import spray.json.RootJsonReader -import xyz.driver.core.rest.{AuthorizedServiceRequestContext, ServiceTransport} -import xyz.driver.entities.users -import xyz.driver.pdsuicommon.db.{Pagination, SearchFilterExpr, Sorting} -import xyz.driver.pdsuicommon.domain.{LongId, StringId} -import xyz.driver.pdsuidomain.ListResponse -import xyz.driver.pdsuidomain.entities.{Trial, TrialIssue} -import xyz.driver.pdsuidomain.services.TrialIssueService - -import scala.concurrent.ExecutionContext - -class RestTrialIssueService(transport: ServiceTransport, baseUri: Uri) - (implicit - protected val materializer: Materializer, - protected val exec: ExecutionContext) - extends TrialIssueService with RestHelper{ - - import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._ - import xyz.driver.pdsuidomain.formats.json.listresponse._ - import xyz.driver.pdsuidomain.formats.json.trialissue._ - import xyz.driver.pdsuidomain.services.TrialIssueService._ - - override def create(draft: TrialIssue) - (implicit requestContext: AuthorizedServiceRequestContext[users.AuthUserInfo]) = { - val trialId = draft.trialId - - implicit val jsonReader: RootJsonReader[TrialIssue] = trialIssueReader(trialId) - - for { - entity <- Marshal(draft).to[RequestEntity] - request = HttpRequest(HttpMethods.POST, endpointUri(baseUri, s"/v1/trial/$trialId/issue")).withEntity(entity) - response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[TrialIssue](response) - } yield { - CreateReply.Created(reply) - } - } - - override def getListByTrialId(trialId: StringId[Trial], - filter: SearchFilterExpr, - sorting: Option[Sorting], - pagination: Option[Pagination]) - (implicit requestContext: AuthorizedServiceRequestContext[users.AuthUserInfo]) = { - implicit val jsonReader: RootJsonReader[TrialIssue] = trialIssueReader(trialId) - - val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/trial/$trialId/issue", - filterQuery(filter) ++ sortingQuery(sorting) ++ paginationQuery(pagination)) - ) - for { - response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[ListResponse[TrialIssue]](response) - } yield { - GetListByTrialIdReply.EntityList(reply.items, reply.meta.itemsCount, reply.meta.lastUpdate) - } - } - - override def getById(trialId: StringId[Trial], id: LongId[TrialIssue]) - (implicit requestContext: AuthorizedServiceRequestContext[users.AuthUserInfo]) = { - implicit val jsonReader: RootJsonReader[TrialIssue] = trialIssueReader(trialId) - - val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/trial/$trialId/issue/$id")) - for { - response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[TrialIssue](response) - } yield { - GetByIdReply.Entity(reply) - } - } - - override def update(orig: TrialIssue, draft: TrialIssue) - (implicit requestContext: AuthorizedServiceRequestContext[users.AuthUserInfo]) = { - val trialId = draft.trialId - val id = orig.id.id - - implicit val jsonReader: RootJsonReader[TrialIssue] = trialIssueReader(trialId) - - for { - entity <- Marshal(draft).to[RequestEntity] - request = HttpRequest(HttpMethods.PATCH, endpointUri(baseUri, s"/v1/trial/$trialId/issue/$id")).withEntity(entity) - response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[TrialIssue](response) - } yield { - UpdateReply.Updated(reply) - } - } - - override def delete(trialId: StringId[Trial], id: LongId[TrialIssue]) - (implicit requestContext: AuthorizedServiceRequestContext[users.AuthUserInfo]) = { - val request = HttpRequest(HttpMethods.DELETE, endpointUri(baseUri, s"/v1/trial/$trialId/issue/$id")) - for { - response <- transport.sendRequestGetResponse(requestContext)(request) - _ <- apiResponse[HttpEntity](response) - } yield { - DeleteReply.Deleted - } - } - -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestTrialService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestTrialService.scala deleted file mode 100644 index 94e1c63..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestTrialService.scala +++ /dev/null @@ -1,173 +0,0 @@ -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 -import xyz.driver.core.rest.{Pagination => _, _} -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.services.TrialService -import spray.json.DefaultJsonProtocol._ -import xyz.driver.entities.patient.CancerType -import xyz.driver.entities.users.AuthUserInfo -import xyz.driver.pdsuidomain.ListResponse -import xyz.driver.pdsuidomain.formats.json.export._ - -class RestTrialService(transport: ServiceTransport, baseUri: Uri)(implicit protected val materializer: Materializer, - protected val exec: ExecutionContext) - extends TrialService with RestHelper { - - import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._ - import xyz.driver.pdsuidomain.formats.json.listresponse._ - import xyz.driver.pdsuidomain.formats.json.trial._ - import xyz.driver.pdsuidomain.services.TrialService._ - - def getById(id: StringId[Trial])( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetByIdReply] = { - val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/trial/$id")) - for { - response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[Trial](response) - } yield { - GetByIdReply.Entity(reply) - } - } - - def getTrialWithLabels(trialId: StringId[Trial], cancerType: CancerType)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetTrialWithLabelsReply] = { - val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/export/trial/$cancerType/$trialId")) - for { - response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[ExportTrialWithLabels](response) - } yield { - GetTrialWithLabelsReply.Entity(reply) - } - } - - def getTrialsWithLabels(cancerType: CancerType)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetTrialsWithLabelsReply] = { - val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/export/trial/$cancerType")) - for { - response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[Seq[ExportTrialWithLabels]](response) - } yield { - GetTrialsWithLabelsReply.EntityList(reply) - } - } - - def getPdfSource(trialId: StringId[Trial])( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo] - ): 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 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)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetListReply] = { - val request = HttpRequest( - HttpMethods.GET, - endpointUri(baseUri, "/v1/trial", filterQuery(filter) ++ sortingQuery(sorting) ++ paginationQuery(pagination))) - for { - response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[ListResponse[Trial]](response) - } yield { - GetListReply.EntityList(reply.items, reply.meta.itemsCount, reply.meta.lastUpdate) - } - } - - def update(origTrial: Trial, draftTrial: Trial)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] = { - val id = origTrial.id.id - for { - entity <- Marshal(draftTrial).to[RequestEntity] - request = HttpRequest(HttpMethods.PATCH, endpointUri(baseUri, s"/v1/trial/$id")).withEntity(entity) - response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[Trial](response) - } yield { - UpdateReply.Updated(reply) - } - } - - private def singleAction(origTrial: Trial, action: String, comment: Option[String] = None)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] = { - - val query = comment match { - case Some(s) => Seq("comment" -> s) - case None => Seq.empty[(String, String)] - } - - val id = origTrial.id.id - val request = HttpRequest(HttpMethods.POST, endpointUri(baseUri, s"/v1/trial/$id/$action", query)) - for { - response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[Trial](response) - } yield { - UpdateReply.Updated(reply) - } - } - - def start(origTrial: Trial)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] = - singleAction(origTrial, "start") - - def submit(origTrial: Trial)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] = - singleAction(origTrial, "submit") - - def restart(origTrial: Trial)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] = - singleAction(origTrial, "restart") - - def flag(origTrial: Trial)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] = - singleAction(origTrial, "flag") - - def resolve(origTrial: Trial)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] = - singleAction(origTrial, "resolve") - - def archive(origTrial: Trial, comment: Option[String])( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] = - singleAction(origTrial, "archive", comment) - - 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 - } - } -} |