diff options
Diffstat (limited to 'src/main/scala/xyz/driver/pdsuidomain/services')
9 files changed, 402 insertions, 29 deletions
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/MedicalRecordService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/MedicalRecordService.scala index 46e9156..7a0502b 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/services/MedicalRecordService.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/services/MedicalRecordService.scala @@ -1,10 +1,12 @@ package xyz.driver.pdsuidomain.services +import akka.NotUsed +import akka.stream.scaladsl.Source +import akka.util.ByteString import java.time.LocalDateTime - -import xyz.driver.pdsuicommon.auth.AuthenticatedRequestContext +import xyz.driver.pdsuicommon.auth.{AnonymousRequestContext, AuthenticatedRequestContext} import xyz.driver.pdsuicommon.db._ -import xyz.driver.pdsuicommon.domain.{LongId, UuidId} +import xyz.driver.pdsuicommon.domain.LongId import xyz.driver.pdsuicommon.error._ import xyz.driver.pdsuidomain.entities.MedicalRecord.PdfSource import xyz.driver.pdsuidomain.entities._ @@ -37,24 +39,6 @@ object MedicalRecordService { extends GetByIdReply with DomainError.AuthorizationError with DefaultAccessDeniedError } - sealed trait GetPdfSourceReply - object GetPdfSourceReply { - type Error = GetPdfSourceReply with DomainError - - final case class Entity(x: PdfSource.Channel) extends GetPdfSourceReply - - case object AuthorizationError - extends GetPdfSourceReply with DomainError.AuthorizationError with DefaultAccessDeniedError - - case object NotFoundError extends GetPdfSourceReply with DomainError.NotFoundError { - def userMessage: String = "Medical record PDF hasn't been found" - } - - case object RecordNotFoundError extends GetPdfSourceReply with DomainError.NotFoundError with DefaultNotFoundError - - final case class CommonError(userMessage: String) extends GetPdfSourceReply with DomainError - } - sealed trait GetListReply object GetListReply { final case class EntityList(xs: Seq[MedicalRecord], totalFound: Int, lastUpdate: Option[LocalDateTime]) @@ -99,18 +83,15 @@ 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] + implicit requestContext: AuthenticatedRequestContext): Future[Source[ByteString, NotUsed]] def getAll(filter: SearchFilterExpr = SearchFilterExpr.Empty, sorting: Option[Sorting] = None, pagination: Option[Pagination] = None)( implicit requestContext: AuthenticatedRequestContext): Future[GetListReply] - def create(draft: MedicalRecord): Future[CreateReply] + def create(draft: MedicalRecord)(implicit requestContext: AnonymousRequestContext): Future[CreateReply] def update(origRecord: MedicalRecord, draftRecord: MedicalRecord)( implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestArmService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestArmService.scala index fe4fa4d..2b4e858 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestArmService.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestArmService.scala @@ -72,7 +72,7 @@ class RestArmService(transport: ServiceTransport, baseUri: Uri)(implicit protect val request = HttpRequest(HttpMethods.DELETE, endpointUri(baseUri, s"/v1/arm/$id")) for { response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[ApiArm](response) + _ <- 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 index c02953b..f0f4de8 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestCriterionService.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestCriterionService.scala @@ -77,7 +77,7 @@ class RestCriterionService(transport: ServiceTransport, baseUri: Uri)( val request = HttpRequest(HttpMethods.DELETE, endpointUri(baseUri, s"/v1/criterion/$id")) for { response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[ApiCriterion](response) + _ <- 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 new file mode 100644 index 0000000..68fdde1 --- /dev/null +++ b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestDocumentService.scala @@ -0,0 +1,111 @@ +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.auth._ +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.document.ApiDocument +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 xyz.driver.pdsuicommon.serialization.PlayJsonSupport._ + import xyz.driver.pdsuidomain.services.DocumentService._ + + def getById(id: LongId[Document])(implicit requestContext: AuthenticatedRequestContext): Future[GetByIdReply] = { + val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/document/$id")) + for { + response <- transport.sendRequestGetResponse(requestContext)(request) + reply <- apiResponse[ApiDocument](response) + } yield { + GetByIdReply.Entity(reply.toDomain) + } + } + + def getAll(filter: SearchFilterExpr = SearchFilterExpr.Empty, + sorting: Option[Sorting] = None, + pagination: Option[Pagination] = None)( + implicit requestContext: AuthenticatedRequestContext): 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[ApiDocument]](response) + } yield { + GetListReply.EntityList(reply.items.map(_.toDomain), reply.meta.itemsCount, reply.meta.lastUpdate) + } + } + + def create(draftDocument: Document)(implicit requestContext: AuthenticatedRequestContext): Future[CreateReply] = { + for { + entity <- Marshal(ApiDocument.fromDomain(draftDocument)).to[RequestEntity] + request = HttpRequest(HttpMethods.POST, endpointUri(baseUri, "/v1/document")).withEntity(entity) + response <- transport.sendRequestGetResponse(requestContext)(request) + reply <- apiResponse[ApiDocument](response) + } yield { + CreateReply.Created(reply.toDomain) + } + } + + def update(orig: Document, draft: Document)( + implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] = { + for { + entity <- Marshal(ApiDocument.fromDomain(draft)).to[RequestEntity] + request = HttpRequest(HttpMethods.PATCH, endpointUri(baseUri, s"/v1/document/${orig.id}")).withEntity(entity) + response <- transport.sendRequestGetResponse(requestContext)(request) + reply <- apiResponse[ApiDocument](response) + } yield { + UpdateReply.Updated(reply.toDomain) + } + } + + def delete(id: LongId[Document])(implicit requestContext: AuthenticatedRequestContext): 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: AuthenticatedRequestContext): 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[ApiDocument](response) + } yield { + UpdateReply.Updated(reply.toDomain) + } + } + + def start(orig: Document)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] = + editAction(orig, "start") + def submit(orig: Document)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] = + editAction(orig, "submit") + def restart(orig: Document)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] = + editAction(orig, "restart") + def flag(orig: Document)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] = + editAction(orig, "flag") + def resolve(orig: Document)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] = + editAction(orig, "resolve") + def unassign(orig: Document)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] = + editAction(orig, "unassign") + def archive(orig: Document)(implicit requestContext: AuthenticatedRequestContext): 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 new file mode 100644 index 0000000..caa0042 --- /dev/null +++ b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestDocumentTypeService.scala @@ -0,0 +1,32 @@ +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.pdsuicommon.auth._ +import xyz.driver.pdsuicommon.db._ +import xyz.driver.pdsuidomain.formats.json.ListResponse +import xyz.driver.pdsuidomain.services.DocumentTypeService +import xyz.driver.pdsuidomain.formats.json.document.ApiDocumentType + +class RestDocumentTypeService(transport: ServiceTransport, baseUri: Uri)( + implicit protected val materializer: Materializer, + protected val exec: ExecutionContext) + extends DocumentTypeService with RestHelper { + + import xyz.driver.pdsuicommon.serialization.PlayJsonSupport._ + import xyz.driver.pdsuidomain.services.DocumentTypeService._ + + def getAll(sorting: Option[Sorting] = None)( + implicit requestContext: AuthenticatedRequestContext): Future[GetListReply] = { + val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, "/v1/document-type", sortingQuery(sorting))) + for { + response <- transport.sendRequestGetResponse(requestContext)(request) + reply <- apiResponse[ListResponse[ApiDocumentType]](response) + } yield { + GetListReply.EntityList(reply.items.map(_.toDomain), reply.meta.itemsCount) + } + } +} diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestExtractedDataService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestExtractedDataService.scala new file mode 100644 index 0000000..53b9f38 --- /dev/null +++ b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestExtractedDataService.scala @@ -0,0 +1,97 @@ +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.auth._ +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.ApiExportPatientWithLabels +import xyz.driver.pdsuidomain.formats.json.extracteddata.ApiExtractedData +import xyz.driver.pdsuidomain.services.ExtractedDataService + +class RestExtractedDataService(transport: ServiceTransport, baseUri: Uri)( + implicit protected val materializer: Materializer, + protected val exec: ExecutionContext) + extends ExtractedDataService with RestHelper { + + import xyz.driver.pdsuicommon.serialization.PlayJsonSupport._ + import xyz.driver.pdsuidomain.services.ExtractedDataService._ + + def getById(id: LongId[ExtractedData])(implicit requestContext: AuthenticatedRequestContext): Future[GetByIdReply] = { + val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/extracted-data/$id")) + for { + response <- transport.sendRequestGetResponse(requestContext)(request) + reply <- apiResponse[ApiExtractedData](response) + } yield { + GetByIdReply.Entity(reply.toDomain) + } + } + + def getAll(filter: SearchFilterExpr = SearchFilterExpr.Empty, + sorting: Option[Sorting] = None, + pagination: Option[Pagination] = None)( + implicit requestContext: AuthenticatedRequestContext): 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[ApiExtractedData]](response) + } yield { + GetListReply.EntityList(reply.items.map(_.toDomain), reply.meta.itemsCount) + } + } + + def create(draftRichExtractedData: RichExtractedData)( + implicit requestContext: AuthenticatedRequestContext): Future[CreateReply] = { + for { + entity <- Marshal(ApiExtractedData.fromDomain(draftRichExtractedData)).to[RequestEntity] + request = HttpRequest(HttpMethods.POST, endpointUri(baseUri, "/v1/extracted-data")).withEntity(entity) + response <- transport.sendRequestGetResponse(requestContext)(request) + reply <- apiResponse[ApiExtractedData](response) + } yield { + CreateReply.Created(reply.toDomain) + } + } + def update(origRichExtractedData: RichExtractedData, draftRichExtractedData: RichExtractedData)( + implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] = { + val id = origRichExtractedData.extractedData.id + for { + entity <- Marshal(ApiExtractedData.fromDomain(draftRichExtractedData)).to[RequestEntity] + request = HttpRequest(HttpMethods.PATCH, endpointUri(baseUri, s"/v1/extracted-data/$id")).withEntity(entity) + response <- transport.sendRequestGetResponse(requestContext)(request) + reply <- apiResponse[ApiExtractedData](response) + } yield { + UpdateReply.Updated(reply.toDomain) + } + } + + def delete(id: LongId[ExtractedData])(implicit requestContext: AuthenticatedRequestContext): 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: AuthenticatedRequestContext): Future[GetPatientLabelsReply] = { + val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/export/patient/$id")) + for { + response <- transport.sendRequestGetResponse(requestContext)(request) + reply <- apiResponse[ApiExportPatientWithLabels](response) + } yield { + GetPatientLabelsReply.Entity(reply.toDomain) + } + } + +} diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestMedicalRecordService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestMedicalRecordService.scala new file mode 100644 index 0000000..f2b0f2d --- /dev/null +++ b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestMedicalRecordService.scala @@ -0,0 +1,119 @@ +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.pdsuicommon.auth._ +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.record.ApiRecord +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 xyz.driver.pdsuicommon.serialization.PlayJsonSupport._ + import xyz.driver.pdsuidomain.services.MedicalRecordService._ + + def getById(recordId: LongId[MedicalRecord])( + implicit requestContext: AuthenticatedRequestContext): Future[GetByIdReply] = { + val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/record/$recordId")) + for { + response <- transport.sendRequestGetResponse(requestContext)(request) + reply <- apiResponse[ApiRecord](response) + } yield { + GetByIdReply.Entity(reply.toDomain) + } + } + + def getPdfSource(recordId: LongId[MedicalRecord])( + implicit requestContext: AuthenticatedRequestContext): 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: AuthenticatedRequestContext): 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[ApiRecord]](response) + } yield { + GetListReply.EntityList(reply.items.map(_.toDomain), reply.meta.itemsCount, reply.meta.lastUpdate) + } + } + + def create(draftRecord: MedicalRecord)(implicit requestContext: AnonymousRequestContext): Future[CreateReply] = { + for { + entity <- Marshal(ApiRecord.fromDomain(draftRecord)).to[RequestEntity] + request = HttpRequest(HttpMethods.POST, endpointUri(baseUri, "/v1/record")).withEntity(entity) + response <- transport.sendRequestGetResponse(requestContext)(request) + reply <- apiResponse[ApiRecord](response) + } yield { + CreateReply.Created(reply.toDomain) + } + } + + def update(origRecord: MedicalRecord, draftRecord: MedicalRecord)( + implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] = { + val id = origRecord.id.toString + for { + entity <- Marshal(ApiRecord.fromDomain(draftRecord)).to[RequestEntity] + request = HttpRequest(HttpMethods.PATCH, endpointUri(baseUri, s"/v1/record/$id")).withEntity(entity) + response <- transport.sendRequestGetResponse(requestContext)(request) + reply <- apiResponse[ApiRecord](response) + } yield { + UpdateReply.Updated(reply.toDomain) + } + } + + private def editAction(orig: MedicalRecord, action: String)( + implicit requestContext: AuthenticatedRequestContext): 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[ApiRecord](response) + } yield { + UpdateReply.Updated(reply.toDomain) + } + } + + def start(orig: MedicalRecord)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] = + editAction(orig, "start") + def submit(orig: MedicalRecord)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] = + editAction(orig, "submit") + def restart(orig: MedicalRecord)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] = + editAction(orig, "restart") + def flag(orig: MedicalRecord)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] = + editAction(orig, "flag") + def resolve(orig: MedicalRecord)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] = + editAction(orig, "resolve") + def unassign(orig: MedicalRecord)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] = + editAction(orig, "unassign") + def archive(orig: MedicalRecord)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] = + editAction(orig, "archive") + +} diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestMessageService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestMessageService.scala index e9c09c5..e133825 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestMessageService.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestMessageService.scala @@ -78,7 +78,7 @@ class RestMessageService(transport: ServiceTransport, baseUri: Uri)(implicit pro val request = HttpRequest(HttpMethods.DELETE, endpointUri(baseUri, s"/v1/message/${messageId.id}")) for { response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[ApiMessage](response) + _ <- apiResponse[HttpEntity](response) } yield { DeleteReply.Deleted } diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestProviderTypeService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestProviderTypeService.scala new file mode 100644 index 0000000..f82ec40 --- /dev/null +++ b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestProviderTypeService.scala @@ -0,0 +1,33 @@ +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.pdsuicommon.auth._ +import xyz.driver.pdsuicommon.db._ +import xyz.driver.pdsuidomain.formats.json.ListResponse +import xyz.driver.pdsuidomain.services.ProviderTypeService +import xyz.driver.pdsuidomain.formats.json.document.ApiProviderType + +class RestProviderTypeService(transport: ServiceTransport, baseUri: Uri)( + implicit protected val materializer: Materializer, + protected val exec: ExecutionContext) + extends ProviderTypeService with RestHelper { + + import xyz.driver.pdsuicommon.serialization.PlayJsonSupport._ + import xyz.driver.pdsuidomain.services.ProviderTypeService._ + + def getAll(sorting: Option[Sorting] = None)( + implicit requestContext: AuthenticatedRequestContext): Future[GetListReply] = { + val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, "/v1/provider-type", sortingQuery(sorting))) + for { + response <- transport.sendRequestGetResponse(requestContext)(request) + reply <- apiResponse[ListResponse[ApiProviderType]](response) + } yield { + GetListReply.EntityList(reply.items.map(_.toDomain), reply.meta.itemsCount) + } + } + +} |