aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestTrialIssueService.scala
diff options
context:
space:
mode:
authorKseniya Tomskikh <ktomskih@datamonsters.co>2017-12-14 10:26:44 +0700
committerKseniya Tomskikh <ktomskih@datamonsters.co>2017-12-14 10:26:44 +0700
commited1ad48ac9f5a03839bbe176b363af6c84220e6b (patch)
treef6bb6ff1fc22f5d204d6e9e5f5d330d027048be1 /src/main/scala/xyz/driver/pdsuidomain/services/rest/RestTrialIssueService.scala
parent7c3feb9b3bf7a1cc12e54c1d994649d03e70e14c (diff)
parent51d5d1ddba83f539405c6d395933e1f8a456c871 (diff)
downloadrest-query-ed1ad48ac9f5a03839bbe176b363af6c84220e6b.tar.gz
rest-query-ed1ad48ac9f5a03839bbe176b363af6c84220e6b.tar.bz2
rest-query-ed1ad48ac9f5a03839bbe176b363af6c84220e6b.zip
Merge branch 'master' into support-service-exceptions
Diffstat (limited to 'src/main/scala/xyz/driver/pdsuidomain/services/rest/RestTrialIssueService.scala')
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/rest/RestTrialIssueService.scala103
1 files changed, 103 insertions, 0 deletions
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestTrialIssueService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestTrialIssueService.scala
new file mode 100644
index 0000000..b14d35b
--- /dev/null
+++ b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestTrialIssueService.scala
@@ -0,0 +1,103 @@
+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
+ }
+ }
+
+}