From bb37df3a7d871ae4ff37c3cfc3fecb11f1f245c3 Mon Sep 17 00:00:00 2001 From: Kseniya Tomskikh Date: Mon, 4 Dec 2017 16:25:27 +0700 Subject: PDSUI-2432 Removed *-Reply classes of TM --- .../utils/CustomSwaggerJsonFormats.scala | 3 - .../pdsuidomain/entities/PatientCriterion.scala | 29 +++++- .../entities/PatientEligibleTrial.scala | 10 ++ .../driver/pdsuidomain/entities/PatientLabel.scala | 8 ++ .../fakes/entities/treatmentmatching.scala | 3 - .../formats/json/patientcriterion.scala | 1 - .../formats/json/patienteligibletrial.scala | 1 - .../pdsuidomain/formats/json/patientlabel.scala | 1 - .../services/PatientCriterionService.scala | 111 +------------------- .../services/PatientEligibleTrialService.scala | 114 ++------------------- .../services/PatientHistoryService.scala | 26 +---- .../services/PatientHypothesisService.scala | 82 +-------------- .../pdsuidomain/services/PatientIssueService.scala | 72 +------------ .../services/PatientLabelEvidenceService.scala | 47 +-------- .../pdsuidomain/services/PatientLabelService.scala | 105 +------------------ .../pdsuidomain/services/PatientService.scala | 80 ++------------- .../rest/RestPatientCriterionService.scala | 25 ++--- .../services/rest/RestPatientLabelService.scala | 21 ++-- .../services/rest/RestPatientService.scala | 32 +++--- .../formats/json/PatientCriterionFormatSuite.scala | 3 +- .../json/PatientEligibleTrialFormatSuite.scala | 3 +- .../formats/json/PatientLabelFormatSuite.scala | 1 - 22 files changed, 120 insertions(+), 658 deletions(-) diff --git a/src/main/scala/xyz/driver/pdsuicommon/utils/CustomSwaggerJsonFormats.scala b/src/main/scala/xyz/driver/pdsuicommon/utils/CustomSwaggerJsonFormats.scala index f617a20..27560d5 100644 --- a/src/main/scala/xyz/driver/pdsuicommon/utils/CustomSwaggerJsonFormats.scala +++ b/src/main/scala/xyz/driver/pdsuicommon/utils/CustomSwaggerJsonFormats.scala @@ -18,9 +18,6 @@ import xyz.driver.pdsuidomain.formats.json.record._ import xyz.driver.pdsuidomain.formats.json.document._ import xyz.driver.pdsuidomain.services.CriterionService.RichCriterion import xyz.driver.pdsuidomain.services.ExtractedDataService.RichExtractedData -import xyz.driver.pdsuidomain.services.PatientCriterionService.{DraftPatientCriterion, RichPatientCriterion} -import xyz.driver.pdsuidomain.services.PatientEligibleTrialService.RichPatientEligibleTrial -import xyz.driver.pdsuidomain.services.PatientLabelService.RichPatientLabel import scala.collection.immutable diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/PatientCriterion.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/PatientCriterion.scala index 193e8cb..e6d466a 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/entities/PatientCriterion.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/entities/PatientCriterion.scala @@ -2,7 +2,7 @@ package xyz.driver.pdsuidomain.entities import java.time.LocalDateTime -import xyz.driver.entities.labels.LabelValue +import xyz.driver.entities.labels.{Label, LabelValue} import xyz.driver.pdsuicommon.domain.{LongId, StringId} import xyz.driver.pdsuicommon.logging._ @@ -57,6 +57,33 @@ final case class PatientCriterion(id: LongId[PatientCriterion], def isIneligibleForEv: Boolean = eligibilityStatus === LabelValue.No && isVerified } +final case class DraftPatientCriterion(id: LongId[PatientCriterion], + eligibilityStatus: Option[LabelValue], + isVerified: Option[Boolean]) { + def applyTo(orig: PatientCriterion) = { + orig.copy( + eligibilityStatus = eligibilityStatus.getOrElse(orig.eligibilityStatus), + isVerified = isVerified.getOrElse(orig.isVerified) + ) + } +} + +object DraftPatientCriterion { + implicit def toPhiString(x: DraftPatientCriterion): PhiString = { + phi"DraftPatientCriterion(id=${x.id}, eligibilityStatus=${Unsafe(x.eligibilityStatus)}, isVerified=${x.isVerified})" + } +} + +final case class RichPatientCriterion(patientCriterion: PatientCriterion, + labelId: LongId[Label], + armList: List[PatientCriterionArm]) + +object RichPatientCriterion { + implicit def toPhiString(x: RichPatientCriterion): PhiString = { + phi"RichPatientCriterion(patientCriterion=${x.patientCriterion}, labelId=${x.labelId}, arms=${x.armList})" + } +} + object PatientCriterionArm { implicit def toPhiString(x: PatientCriterionArm): PhiString = { diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/PatientEligibleTrial.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/PatientEligibleTrial.scala index 179056a..4f62a9e 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/entities/PatientEligibleTrial.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/entities/PatientEligibleTrial.scala @@ -82,3 +82,13 @@ final case class PatientTrialArmGroupView(id: LongId[PatientTrialArmGroup], ) } } + +final case class RichPatientEligibleTrial(trial: Trial, + group: PatientTrialArmGroupView, + arms: List[PatientCriterionArm]) + +object RichPatientEligibleTrial { + implicit def toPhiString(x: RichPatientEligibleTrial): PhiString = { + phi"RichPatientEligibleTrial(group=${x.group}, trial=${x.trial}, arms=${x.arms})" + } +} diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/PatientLabel.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/PatientLabel.scala index df86175..8d64389 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/entities/PatientLabel.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/entities/PatientLabel.scala @@ -22,6 +22,14 @@ final case class PatientLabel(id: LongId[PatientLabel], isImplicitMatch: Boolean, isVisible: Boolean) +final case class RichPatientLabel(patientLabel: PatientLabel, isVerified: Boolean) + +object RichPatientLabel { + implicit def toPhiString(x: RichPatientLabel): PhiString = { + phi"RichPatientLabel(patientLabel=${x.patientLabel}, isVerified=${x.isVerified})" + } +} + object PatientLabelEvidence { implicit def toPhiString(x: PatientLabelEvidence): PhiString = { import x._ diff --git a/src/main/scala/xyz/driver/pdsuidomain/fakes/entities/treatmentmatching.scala b/src/main/scala/xyz/driver/pdsuidomain/fakes/entities/treatmentmatching.scala index f2d6a1b..190add6 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/fakes/entities/treatmentmatching.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/fakes/entities/treatmentmatching.scala @@ -6,9 +6,6 @@ import xyz.driver.fakes import xyz.driver.pdsuicommon.domain.{LongId, StringId} import xyz.driver.pdsuidomain.ListResponse import xyz.driver.pdsuidomain.entities._ -import xyz.driver.pdsuidomain.services.PatientCriterionService.{DraftPatientCriterion, RichPatientCriterion} -import xyz.driver.pdsuidomain.services.PatientEligibleTrialService.RichPatientEligibleTrial -import xyz.driver.pdsuidomain.services.PatientLabelService.RichPatientLabel import eu.timepit.refined.{refineMV, refineV} import xyz.driver.core.auth.User diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patientcriterion.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patientcriterion.scala index 1004c5b..035310b 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patientcriterion.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patientcriterion.scala @@ -5,7 +5,6 @@ import xyz.driver.entities.labels.{Label, LabelValue} import xyz.driver.formats.json.labels._ import xyz.driver.pdsuicommon.domain.LongId import xyz.driver.pdsuidomain.entities._ -import xyz.driver.pdsuidomain.services.PatientCriterionService.{DraftPatientCriterion, RichPatientCriterion} object patientcriterion { import DefaultJsonProtocol._ diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patienteligibletrial.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patienteligibletrial.scala index 4c006f9..d719c5c 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patienteligibletrial.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patienteligibletrial.scala @@ -3,7 +3,6 @@ package xyz.driver.pdsuidomain.formats.json import spray.json._ import xyz.driver.formats.json.labels._ import xyz.driver.pdsuidomain.entities._ -import xyz.driver.pdsuidomain.services.PatientEligibleTrialService.RichPatientEligibleTrial object patienteligibletrial { import DefaultJsonProtocol._ diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patientlabel.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patientlabel.scala index 6499318..615b3a2 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patientlabel.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patientlabel.scala @@ -4,7 +4,6 @@ import spray.json._ import xyz.driver.entities.labels.LabelValue import xyz.driver.formats.json.labels._ import xyz.driver.pdsuidomain.entities._ -import xyz.driver.pdsuidomain.services.PatientLabelService.RichPatientLabel import xyz.driver.formats.json.labels._ import xyz.driver.pdsuidomain.formats.json.record._ import xyz.driver.pdsuidomain.formats.json.document._ diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/PatientCriterionService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/PatientCriterionService.scala index 68e7b50..8be9f64 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/services/PatientCriterionService.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/services/PatientCriterionService.scala @@ -3,130 +3,27 @@ package xyz.driver.pdsuidomain.services import java.time.LocalDateTime import xyz.driver.core.rest.AuthorizedServiceRequestContext -import xyz.driver.entities.labels.{Label, LabelValue} import xyz.driver.entities.users.AuthUserInfo import xyz.driver.pdsuicommon.db._ import xyz.driver.pdsuicommon.domain._ -import xyz.driver.pdsuicommon.error.DomainError -import xyz.driver.pdsuicommon.logging._ import xyz.driver.pdsuidomain.entities._ import scala.concurrent.Future -object PatientCriterionService { - - final case class DraftPatientCriterion(id: LongId[PatientCriterion], - eligibilityStatus: Option[LabelValue], - isVerified: Option[Boolean]) { - def applyTo(orig: PatientCriterion) = { - orig.copy( - eligibilityStatus = eligibilityStatus.getOrElse(orig.eligibilityStatus), - isVerified = isVerified.getOrElse(orig.isVerified) - ) - } - } - - object DraftPatientCriterion { - implicit def toPhiString(x: DraftPatientCriterion): PhiString = { - phi"DraftPatientCriterion(id=${x.id}, eligibilityStatus=${Unsafe(x.eligibilityStatus)}, isVerified=${x.isVerified})" - } - } - - trait DefaultPatientNotFoundError { - def userMessage: String = "Patient not found" - } - - trait DefaultNotFoundError { - def userMessage: String = "Patient criterion not found" - } - - trait DefaultAccessDeniedError { - def userMessage: String = "Access denied" - } - - final case class RichPatientCriterion(patientCriterion: PatientCriterion, - labelId: LongId[Label], - armList: List[PatientCriterionArm]) - - object RichPatientCriterion { - implicit def toPhiString(x: RichPatientCriterion): PhiString = { - phi"RichPatientCriterion(patientCriterion=${x.patientCriterion}, labelId=${x.labelId}, arms=${x.armList})" - } - } - - sealed trait GetListReply - object GetListReply { - type Error = GetListReply with DomainError - - final case class EntityList(xs: Seq[RichPatientCriterion], totalFound: Int, lastUpdate: Option[LocalDateTime]) - extends GetListReply - - case object AuthorizationError - extends GetListReply with DomainError.AuthorizationError with DefaultAccessDeniedError - - case object PatientNotFoundError - extends GetListReply with DomainError.NotFoundError with DefaultPatientNotFoundError - - final case class CommonError(userMessage: String) extends GetListReply with DomainError - - } - - sealed trait GetByIdReply - object GetByIdReply { - type Error = GetByIdReply with DomainError - - final case class Entity(x: RichPatientCriterion) extends GetByIdReply - - case object AuthorizationError - extends GetByIdReply with DomainError.AuthorizationError with DefaultAccessDeniedError - - case object NotFoundError extends GetByIdReply with DomainError.NotFoundError with DefaultNotFoundError - - case object PatientNotFoundError - extends GetByIdReply with DomainError.NotFoundError with DefaultPatientNotFoundError - - final case class CommonError(userMessage: String) extends GetByIdReply with DomainError - - implicit def toPhiString(reply: GetByIdReply): PhiString = reply match { - case x: DomainError => phi"GetByIdReply.Error($x)" - case Entity(x) => phi"GetByIdReply.Entity($x)" - } - } - - sealed trait UpdateReply - object UpdateReply { - type Error = UpdateReply with DomainError - - final case class Updated(x: RichPatientCriterion) extends UpdateReply - - case object UpdatedList extends UpdateReply - - case object AuthorizationError - extends UpdateReply with DomainError.AuthorizationError with DefaultAccessDeniedError - - case object PatientNotFoundError - extends UpdateReply with DomainError.NotFoundError with DefaultPatientNotFoundError - - final case class CommonError(userMessage: String) extends UpdateReply with DomainError - } -} - trait PatientCriterionService { - import PatientCriterionService._ - def getAll(patientId: UuidId[Patient], origFilter: SearchFilterExpr = SearchFilterExpr.Empty, sorting: Option[Sorting] = None, pagination: Option[Pagination] = None)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetListReply] + implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[(Seq[RichPatientCriterion], Int, Option[LocalDateTime])] def getById(patientId: UuidId[Patient], id: LongId[PatientCriterion])( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetByIdReply] + implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[RichPatientCriterion] def updateList(patientId: UuidId[Patient], draftEntities: List[DraftPatientCriterion])( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] + implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[Unit] def update(origEntity: PatientCriterion, draftEntity: PatientCriterion, patientId: UuidId[Patient])( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] + implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[RichPatientCriterion] } diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/PatientEligibleTrialService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/PatientEligibleTrialService.scala index 8d1288a..ab8c5fd 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/services/PatientEligibleTrialService.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/services/PatientEligibleTrialService.scala @@ -4,128 +4,26 @@ import xyz.driver.core.rest.AuthorizedServiceRequestContext import xyz.driver.entities.users.AuthUserInfo import xyz.driver.pdsuicommon.db.{Pagination, SearchFilterExpr, Sorting} import xyz.driver.pdsuicommon.domain.{LongId, UuidId} -import xyz.driver.pdsuicommon.error.DomainError -import xyz.driver.pdsuicommon.logging._ -import xyz.driver.pdsuidomain.entities.{Trial, _} -import xyz.driver.pdsuidomain.services.PatientCriterionService.RichPatientCriterion +import xyz.driver.pdsuidomain.entities._ import scala.concurrent.Future -object PatientEligibleTrialService { - - trait DefaultNotFoundError { - def userMessage: String = "Patient eligible trial not found" - } - - trait DefaultPatientNotFoundError { - def userMessage: String = "Patient not found" - } - - trait DefaultAccessDeniedError { - def userMessage: String = "Access denied" - } - - final case class RichPatientEligibleTrial(trial: Trial, - group: PatientTrialArmGroupView, - arms: List[PatientCriterionArm]) - - object RichPatientEligibleTrial { - implicit def toPhiString(x: RichPatientEligibleTrial): PhiString = { - phi"RichPatientEligibleTrial(group=${x.group}, trial=${x.trial}, arms=${x.arms})" - } - } - - sealed trait GetListReply - object GetListReply { - final case class EntityList(xs: Seq[RichPatientEligibleTrial], totalFound: Int) extends GetListReply - - case object AuthorizationError - extends GetListReply with DomainError.AuthorizationError with DefaultAccessDeniedError - - case object PatientNotFoundError - extends GetListReply with DefaultPatientNotFoundError with DomainError.NotFoundError - - final case class CommonError(userMessage: String) extends GetListReply with DomainError - } - - sealed trait GetByIdReply - object GetByIdReply { - final case class Entity(x: RichPatientEligibleTrial) extends GetByIdReply - - type Error = GetByIdReply with DomainError - - case object NotFoundError extends GetByIdReply with DefaultNotFoundError with DomainError.NotFoundError - - case object PatientNotFoundError - extends GetByIdReply with DefaultPatientNotFoundError with DomainError.NotFoundError - - case object AuthorizationError - extends GetByIdReply with DomainError.AuthorizationError with DefaultAccessDeniedError - - final case class CommonError(userMessage: String) extends GetByIdReply with DomainError - - implicit def toPhiString(reply: GetByIdReply): PhiString = reply match { - case x: DomainError => phi"GetByIdReply.Error($x)" - case Entity(x) => phi"GetByIdReply.Entity($x)" - } - } - - sealed trait GetCriterionListOfGroupReply - object GetCriterionListOfGroupReply { - final case class EntityList(xs: Seq[RichPatientCriterion], totalFound: Int) extends GetCriterionListOfGroupReply - - type Error = GetCriterionListOfGroupReply with DomainError - - case object AuthorizationError - extends GetCriterionListOfGroupReply with DomainError.AuthorizationError with DefaultAccessDeniedError - - case object NotFoundError - extends GetCriterionListOfGroupReply with DefaultNotFoundError with DomainError.NotFoundError - - case object PatientNotFoundError - extends GetCriterionListOfGroupReply with DefaultPatientNotFoundError with DomainError.NotFoundError - - final case class CommonError(userMessage: String) extends GetCriterionListOfGroupReply with DomainError - } - - sealed trait UpdateReply - object UpdateReply { - type Error = UpdateReply with DomainError - - final case class Updated(updated: RichPatientEligibleTrial) extends UpdateReply - - case object NotFoundError extends UpdateReply with DefaultNotFoundError with DomainError.NotFoundError - - case object PatientNotFoundError extends UpdateReply with DefaultPatientNotFoundError with DomainError.NotFoundError - - case object AuthorizationError extends UpdateReply with DomainError.AuthorizationError with DefaultAccessDeniedError - - final case class CommonError(userMessage: String) extends UpdateReply with DomainError - - implicit def toPhiString(reply: UpdateReply): PhiString = reply match { - case Updated(x) => phi"Updated($x)" - case x: Error => DomainError.toPhiString(x) - } - } -} - trait PatientEligibleTrialService { - import PatientEligibleTrialService._ - def getAll(patientId: UuidId[Patient], filter: SearchFilterExpr = SearchFilterExpr.Empty, sorting: Option[Sorting] = None, pagination: Option[Pagination] = None)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetListReply] + implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[(Seq[RichPatientEligibleTrial], Int)] def getById(patientId: UuidId[Patient], id: LongId[PatientTrialArmGroup])( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetByIdReply] + implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[RichPatientEligibleTrial] def getCriterionListByGroupId(patientId: UuidId[Patient], id: LongId[PatientTrialArmGroup])( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetCriterionListOfGroupReply] + implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[(Seq[RichPatientCriterion], + Int)] def update(origEligibleTrialWithTrial: RichPatientEligibleTrial, draftPatientTrialArmGroup: PatientTrialArmGroupView)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] + implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[RichPatientEligibleTrial] } diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/PatientHistoryService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/PatientHistoryService.scala index 9ad6a56..7686a0c 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/services/PatientHistoryService.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/services/PatientHistoryService.scala @@ -6,40 +6,16 @@ import xyz.driver.core.rest.AuthorizedServiceRequestContext import xyz.driver.entities.users.AuthUserInfo import xyz.driver.pdsuicommon.db.{Pagination, SearchFilterExpr, Sorting} import xyz.driver.pdsuicommon.domain.UuidId -import xyz.driver.pdsuicommon.error.DomainError import xyz.driver.pdsuidomain.entities.{Patient, PatientHistory} import scala.concurrent.Future -object PatientHistoryService { - - trait DefaultNotFoundError { - def userMessage: String = "Patient history not found" - } - - trait DefaultAccessDeniedError { - def userMessage: String = "Access denied" - } - - sealed trait GetListReply - object GetListReply { - final case class EntityList(xs: Seq[PatientHistory], totalFound: Int, lastUpdate: Option[LocalDateTime]) - extends GetListReply - - final case object AuthorizationError - extends GetListReply with DomainError.AuthorizationError with DefaultAccessDeniedError - } - -} - trait PatientHistoryService { - import PatientHistoryService._ - def getListByPatientId(id: UuidId[Patient], filter: SearchFilterExpr = SearchFilterExpr.Empty, sorting: Option[Sorting] = None, pagination: Option[Pagination] = None)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetListReply] + implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[(Seq[PatientHistory], Int, Option[LocalDateTime])] } diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/PatientHypothesisService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/PatientHypothesisService.scala index 2dcfcb5..cbfcd6c 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/services/PatientHypothesisService.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/services/PatientHypothesisService.scala @@ -4,97 +4,21 @@ import xyz.driver.core.rest.AuthorizedServiceRequestContext import xyz.driver.entities.users.AuthUserInfo import xyz.driver.pdsuicommon.db.{Pagination, SearchFilterExpr, Sorting} import xyz.driver.pdsuicommon.domain.UuidId -import xyz.driver.pdsuicommon.error.DomainError -import xyz.driver.pdsuicommon.logging._ import xyz.driver.pdsuidomain.entities.{Hypothesis, Patient, PatientHypothesis} import scala.concurrent.Future -object PatientHypothesisService { - - trait DefaultNotFoundError { - def userMessage: String = "Patient hypothesis not found" - } - - trait DefaultPatientNotFoundError { - def userMessage: String = "Patient not found" - } - - trait DefaultAccessDeniedError { - def userMessage: String = "Access denied" - } - - sealed trait GetListReply - object GetListReply { - final case class EntityList(xs: Seq[PatientHypothesis], totalFound: Int) extends GetListReply - - case object AuthorizationError - extends GetListReply with DomainError.AuthorizationError with DefaultAccessDeniedError - - case object PatientNotFoundError - extends GetListReply with DefaultPatientNotFoundError with DomainError.NotFoundError - - final case class CommonError(userMessage: String) extends GetListReply with DomainError - } - - sealed trait GetByIdReply - object GetByIdReply { - final case class Entity(x: PatientHypothesis) extends GetByIdReply - - type Error = GetByIdReply with DomainError - - case object NotFoundError extends GetByIdReply with DefaultNotFoundError with DomainError.NotFoundError - - case object PatientNotFoundError - extends GetByIdReply with DefaultPatientNotFoundError with DomainError.NotFoundError - - case object AuthorizationError - extends GetByIdReply with DomainError.AuthorizationError with DefaultAccessDeniedError - - final case class CommonError(userMessage: String) extends GetByIdReply with DomainError - - implicit def toPhiString(reply: GetByIdReply): PhiString = reply match { - case x: DomainError => phi"GetByIdReply.Error($x)" - case Entity(x) => phi"GetByIdReply.Entity($x)" - } - } - - sealed trait UpdateReply - object UpdateReply { - type Error = UpdateReply with DomainError - - final case class Updated(updated: PatientHypothesis) extends UpdateReply - - case object NotFoundError extends UpdateReply with DefaultNotFoundError with DomainError.NotFoundError - - case object PatientNotFoundError - extends UpdateReply with DefaultPatientNotFoundError with DomainError.NotFoundError - - case object AuthorizationError - extends UpdateReply with DomainError.AuthorizationError with DefaultAccessDeniedError - - final case class CommonError(userMessage: String) extends UpdateReply with DomainError - - implicit def toPhiString(reply: UpdateReply): PhiString = reply match { - case Updated(x) => phi"Updated($x)" - case x: Error => DomainError.toPhiString(x) - } - } -} - trait PatientHypothesisService { - import PatientHypothesisService._ - def getAll(patientId: UuidId[Patient], filter: SearchFilterExpr = SearchFilterExpr.Empty, sorting: Option[Sorting] = None, pagination: Option[Pagination] = None)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetListReply] + implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[(Seq[PatientHypothesis], Int)] def getById(patientId: UuidId[Patient], hypothesisId: UuidId[Hypothesis])( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetByIdReply] + implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[PatientHypothesis] def update(origPatientHypothesis: PatientHypothesis, draftPatientHypothesis: PatientHypothesis)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] + implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[PatientHypothesis] } diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/PatientIssueService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/PatientIssueService.scala index cf47c94..d2c8a7d 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/services/PatientIssueService.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/services/PatientIssueService.scala @@ -6,90 +6,28 @@ import xyz.driver.core.rest.AuthorizedServiceRequestContext import xyz.driver.entities.users.AuthUserInfo import xyz.driver.pdsuicommon.db.{Pagination, SearchFilterExpr, Sorting} import xyz.driver.pdsuicommon.domain.{LongId, UuidId} -import xyz.driver.pdsuicommon.error.DomainError import xyz.driver.pdsuidomain.entities.{Patient, PatientIssue} import scala.concurrent.Future -object PatientIssueService { - - trait DefaultNotFoundError { - def userMessage: String = "PatientIssue not found" - } - - trait DefaultAccessDeniedError { - def userMessage: String = "Access denied" - } - - sealed trait CreateReply - object CreateReply { - type Error = CreateReply with DomainError - final case class Created(x: PatientIssue) extends CreateReply - case object AuthorizationError - extends CreateReply with DomainError.AuthorizationError with DefaultAccessDeniedError - final case class CommonError(userMessage: String) extends CreateReply with DomainError - } - - sealed trait GetByIdReply - object GetByIdReply { - type Error = GetByIdReply with DomainError - final case class Entity(x: PatientIssue) extends GetByIdReply - case object NotFoundError extends GetByIdReply with DomainError.NotFoundError with DefaultNotFoundError - final case class CommonError(userMessage: String) extends GetByIdReply with DomainError - case object AuthorizationError - extends GetByIdReply with DomainError.AuthorizationError with DefaultAccessDeniedError - } - - sealed trait GetListByPatientIdReply - object GetListByPatientIdReply { - type Error = GetListByPatientIdReply with DomainError - final case class EntityList(xs: Seq[PatientIssue], totalFound: Int, lastUpdate: Option[LocalDateTime]) - extends GetListByPatientIdReply - case object NotFoundError extends GetListByPatientIdReply with DomainError.NotFoundError with DefaultNotFoundError - case object AuthorizationError - extends GetListByPatientIdReply with DomainError.AuthorizationError with DefaultAccessDeniedError - } - - sealed trait UpdateReply - object UpdateReply { - type Error = UpdateReply with DomainError - final case class Updated(updated: PatientIssue) extends UpdateReply - case object AuthorizationError - extends UpdateReply with DomainError.AuthorizationError with DefaultAccessDeniedError - final case class CommonError(userMessage: String) extends UpdateReply with DomainError - } - - sealed trait DeleteReply - object DeleteReply { - type Error = DeleteReply with DomainError - case object Deleted extends DeleteReply - case object AuthorizationError - extends DeleteReply with DomainError.AuthorizationError with DefaultAccessDeniedError - case object NotFoundError extends DeleteReply with DomainError.NotFoundError with DefaultNotFoundError - final case class CommonError(userMessage: String) extends DeleteReply with DomainError - } -} - trait PatientIssueService { - import PatientIssueService._ - def create(draft: PatientIssue)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[CreateReply] + implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[PatientIssue] def getById(patientId: UuidId[Patient], id: LongId[PatientIssue])( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetByIdReply] + implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[PatientIssue] def getListByPatientId(patientId: UuidId[Patient], filter: SearchFilterExpr = SearchFilterExpr.Empty, sorting: Option[Sorting] = None, pagination: Option[Pagination] = None)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetListByPatientIdReply] + implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[(Seq[PatientIssue], Int, Option[LocalDateTime])] def update(orig: PatientIssue, draft: PatientIssue)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] + implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[PatientIssue] def delete(patientId: UuidId[Patient], id: LongId[PatientIssue])( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[DeleteReply] + implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[Unit] } diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/PatientLabelEvidenceService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/PatientLabelEvidenceService.scala index 1ddf401..cccfd92 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/services/PatientLabelEvidenceService.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/services/PatientLabelEvidenceService.scala @@ -5,62 +5,19 @@ import xyz.driver.entities.labels.Label import xyz.driver.entities.users.AuthUserInfo import xyz.driver.pdsuicommon.db._ import xyz.driver.pdsuicommon.domain.{LongId, UuidId} -import xyz.driver.pdsuicommon.error.DomainError import xyz.driver.pdsuidomain.entities._ import scala.concurrent.Future -object PatientLabelEvidenceService { - - trait DefaultAccessDeniedError { - def userMessage: String = "Access denied" - } - - trait DefaultPatientNotFoundError { - def userMessage: String = "Patient not found" - } - - sealed trait GetByIdReply - object GetByIdReply { - final case class Entity(x: PatientLabelEvidenceView) extends GetByIdReply - - type Error = GetByIdReply with DomainError - - final case class NotFoundError(userMessage: String) extends GetByIdReply with DomainError.NotFoundError - - final case class CommonError(userMessage: String) extends GetByIdReply with DomainError - - case object AuthorizationError - extends GetByIdReply with DomainError.AuthorizationError with DefaultAccessDeniedError - } - - sealed trait GetListReply - object GetListReply { - final case class EntityList(xs: Seq[PatientLabelEvidenceView], totalFound: Int) extends GetListReply - - type Error = GetListReply with DomainError - - case object PatientNotFoundError - extends GetListReply with DefaultPatientNotFoundError with DomainError.NotFoundError - - case object AuthorizationError - extends GetListReply with DomainError.AuthorizationError with DefaultAccessDeniedError - - final case class CommonError(userMessage: String) extends GetListReply with DomainError - } -} - trait PatientLabelEvidenceService { - import PatientLabelEvidenceService._ - def getById(patientId: UuidId[Patient], labelId: LongId[Label], id: LongId[PatientLabelEvidence])( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetByIdReply] + implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[PatientLabelEvidenceView] def getAll(patientId: UuidId[Patient], labelId: LongId[Label], filter: SearchFilterExpr = SearchFilterExpr.Empty, sorting: Option[Sorting] = None, pagination: Option[Pagination] = None)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetListReply] + implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[(Seq[PatientLabelEvidenceView], Int)] } diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/PatientLabelService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/PatientLabelService.scala index 048374a..2ae3f44 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/services/PatientLabelService.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/services/PatientLabelService.scala @@ -5,123 +5,26 @@ import xyz.driver.entities.labels.Label import xyz.driver.entities.users.AuthUserInfo import xyz.driver.pdsuicommon.db._ import xyz.driver.pdsuicommon.domain._ -import xyz.driver.pdsuicommon.error.DomainError -import xyz.driver.pdsuicommon.logging._ import xyz.driver.pdsuidomain.entities._ import scala.concurrent.Future -object PatientLabelService { - - trait DefaultNotFoundError { - def userMessage: String = "Patient label not found" - } - - trait DefaultPatientNotFoundError { - def userMessage: String = "Patient not found" - } - - trait DefaultAccessDeniedError { - def userMessage: String = "Access denied" - } - - final case class RichPatientLabel(patientLabel: PatientLabel, isVerified: Boolean) - - object RichPatientLabel { - implicit def toPhiString(x: RichPatientLabel): PhiString = { - phi"RichPatientLabel(patientLabel=${x.patientLabel}, isVerified=${x.isVerified})" - } - } - - sealed trait GetListReply - object GetListReply { - final case class EntityList(xs: Seq[RichPatientLabel], totalFound: Int) extends GetListReply - - case object AuthorizationError - extends GetListReply with DomainError.AuthorizationError with DefaultAccessDeniedError - - case object PatientNotFoundError - extends GetListReply with DefaultPatientNotFoundError with DomainError.NotFoundError - - final case class CommonError(userMessage: String) extends GetListReply with DomainError - } - - sealed trait GetDefiningCriteriaListReply - object GetDefiningCriteriaListReply { - final case class EntityList(xs: Seq[PatientLabel], totalFound: Int) extends GetDefiningCriteriaListReply - - case object AuthorizationError - extends GetDefiningCriteriaListReply with DomainError.AuthorizationError with DefaultAccessDeniedError - - case object PatientNotFoundError - extends GetDefiningCriteriaListReply with DefaultPatientNotFoundError with DomainError.NotFoundError - - final case class CommonError(userMessage: String) extends GetDefiningCriteriaListReply with DomainError - } - - sealed trait GetByLabelIdReply - object GetByLabelIdReply { - final case class Entity(x: RichPatientLabel) extends GetByLabelIdReply - - type Error = GetByLabelIdReply with DomainError - - case object NotFoundError extends GetByLabelIdReply with DefaultNotFoundError with DomainError.NotFoundError - - case object PatientNotFoundError - extends GetByLabelIdReply with DefaultPatientNotFoundError with DomainError.NotFoundError - - case object AuthorizationError - extends GetByLabelIdReply with DomainError.AuthorizationError with DefaultAccessDeniedError - - final case class CommonError(userMessage: String) extends GetByLabelIdReply with DomainError - - implicit def toPhiString(reply: GetByLabelIdReply): PhiString = reply match { - case x: DomainError => phi"GetByIdReply.Error($x)" - case Entity(x) => phi"GetByIdReply.Entity($x)" - } - } - - sealed trait UpdateReply - object UpdateReply { - type Error = UpdateReply with DomainError - - final case class Updated(updated: RichPatientLabel) extends UpdateReply - - case object NotFoundError extends UpdateReply with DefaultNotFoundError with DomainError.NotFoundError - - case object PatientNotFoundError - extends UpdateReply with DefaultPatientNotFoundError with DomainError.NotFoundError - - case object AuthorizationError - extends UpdateReply with DomainError.AuthorizationError with DefaultAccessDeniedError - - final case class CommonError(userMessage: String) extends UpdateReply with DomainError - - implicit def toPhiString(reply: UpdateReply): PhiString = reply match { - case Updated(x) => phi"Updated($x)" - case x: Error => DomainError.toPhiString(x) - } - } -} - trait PatientLabelService { - import PatientLabelService._ - def getAll(patientId: UuidId[Patient], filter: SearchFilterExpr = SearchFilterExpr.Empty, sorting: Option[Sorting] = None, pagination: Option[Pagination] = None)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetListReply] + implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[(Seq[RichPatientLabel], Int)] def getDefiningCriteriaList(patientId: UuidId[Patient], hypothesisId: UuidId[Hypothesis], pagination: Option[Pagination] = None)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetDefiningCriteriaListReply] + implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[(Seq[PatientLabel], Int)] def getByLabelIdOfPatient(patientId: UuidId[Patient], labelId: LongId[Label])( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetByLabelIdReply] + implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[RichPatientLabel] def update(origPatientLabel: PatientLabel, draftPatientLabel: PatientLabel)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] + implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[RichPatientLabel] } diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/PatientService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/PatientService.scala index e23fc7a..573982f 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/services/PatientService.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/services/PatientService.scala @@ -6,99 +6,35 @@ import xyz.driver.core.rest.AuthorizedServiceRequestContext import xyz.driver.entities.users.AuthUserInfo import xyz.driver.pdsuicommon.db._ import xyz.driver.pdsuicommon.domain._ -import xyz.driver.pdsuicommon.error.DomainError -import xyz.driver.pdsuicommon.logging._ import xyz.driver.pdsuidomain.entities._ import scala.concurrent.Future -object PatientService { - - trait DefaultNotFoundError { - def userMessage: String = "Patient not found" - } - - trait DefaultAccessDeniedError { - def userMessage: String = "Access denied" - } - - sealed trait GetListReply - object GetListReply { - final case class EntityList(xs: Seq[Patient], totalFound: Int, lastUpdate: Option[LocalDateTime]) - extends GetListReply - - case object AuthorizationError - extends GetListReply with DomainError.AuthorizationError with DefaultAccessDeniedError - } - - sealed trait GetByIdReply - object GetByIdReply { - final case class Entity(x: Patient) extends GetByIdReply - - type Error = GetByIdReply with DomainError - - case object NotFoundError extends GetByIdReply with DefaultNotFoundError with DomainError.NotFoundError - - case object AuthorizationError - extends GetByIdReply with DomainError.AuthorizationError with DefaultAccessDeniedError - - final case class CommonError(userMessage: String)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]) - extends GetByIdReply with DomainError - - implicit def toPhiString(reply: GetByIdReply): PhiString = reply match { - case x: DomainError => phi"GetByIdReply.Error($x)" - case Entity(x) => phi"GetByIdReply.Entity($x)" - } - } - - sealed trait UpdateReply - object UpdateReply { - type Error = UpdateReply with DomainError - - final case class Updated(updated: Patient) extends UpdateReply - - case object NotFoundError extends UpdateReply with DefaultNotFoundError with DomainError.NotFoundError - - case object AuthorizationError - extends UpdateReply with DefaultAccessDeniedError with DomainError.AuthorizationError - - final case class CommonError(userMessage: String) extends UpdateReply with DomainError - - implicit def toPhiString(reply: UpdateReply): PhiString = reply match { - case Updated(x) => phi"Updated($x)" - case x: Error => DomainError.toPhiString(x) - } - } -} - trait PatientService { - import PatientService._ - def getById(id: UuidId[Patient])( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetByIdReply] + implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[Patient] def getAll(filter: SearchFilterExpr = SearchFilterExpr.Empty, sorting: Option[Sorting] = None, pagination: Option[Pagination] = None)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetListReply] + implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[(Seq[Patient], Int, Option[LocalDateTime])] def unassign(origPatient: Patient)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] + implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[Patient] def start(origPatient: Patient)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] + implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[Patient] def submit(origPatient: Patient)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] + implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[Patient] def restart(origPatient: Patient)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] + implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[Patient] def flag(origPatient: Patient)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] + implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[Patient] def resolve(origPatient: Patient)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] + implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[Patient] } diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestPatientCriterionService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestPatientCriterionService.scala index 6629cf5..d543d60 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestPatientCriterionService.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestPatientCriterionService.scala @@ -1,5 +1,7 @@ package xyz.driver.pdsuidomain.services.rest +import java.time.LocalDateTime + import akka.http.scaladsl.marshalling.Marshal import akka.http.scaladsl.model._ import akka.stream.Materializer @@ -22,13 +24,12 @@ class RestPatientCriterionService(transport: ServiceTransport, baseUri: Uri)( import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._ import xyz.driver.pdsuidomain.formats.json.patientcriterion._ import xyz.driver.pdsuidomain.formats.json.listresponse._ - import xyz.driver.pdsuidomain.services.PatientCriterionService._ def getAll(patientId: UuidId[Patient], filter: SearchFilterExpr = SearchFilterExpr.Empty, sorting: Option[Sorting] = None, pagination: Option[Pagination] = None)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetListReply] = { + implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[(Seq[RichPatientCriterion], Int, Option[LocalDateTime])] = { val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/patient/$patientId/criterion", @@ -37,45 +38,45 @@ class RestPatientCriterionService(transport: ServiceTransport, baseUri: Uri)( response <- transport.sendRequestGetResponse(requestContext)(request) reply <- apiResponse[ListResponse[RichPatientCriterion]](response) } yield { - GetListReply.EntityList(reply.items, reply.meta.itemsCount, reply.meta.lastUpdate) + (reply.items, reply.meta.itemsCount, reply.meta.lastUpdate) } } def getById(patientId: UuidId[Patient], id: LongId[PatientCriterion])( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetByIdReply] = { + implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[RichPatientCriterion] = { val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/patient/$patientId/criterion/$id")) for { response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[RichPatientCriterion](response) + entity <- apiResponse[RichPatientCriterion](response) } yield { - GetByIdReply.Entity(reply) + entity } } def updateList(patientId: UuidId[Patient], draftEntities: List[DraftPatientCriterion])( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] = { + 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) - reply <- apiResponse[RichPatientCriterion](response) + _ <- apiResponse[RichPatientCriterion](response) } yield { - UpdateReply.Updated(reply) + () } } def update(origEntity: PatientCriterion, draftEntity: PatientCriterion, patientId: UuidId[Patient])( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] = { + 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) - reply <- apiResponse[RichPatientCriterion](response) + entity <- apiResponse[RichPatientCriterion](response) } yield { - UpdateReply.Updated(reply) + 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 index a6ef5b4..4e9bee7 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestPatientLabelService.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestPatientLabelService.scala @@ -22,13 +22,12 @@ class RestPatientLabelService(transport: ServiceTransport, baseUri: Uri)( import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._ import xyz.driver.pdsuidomain.formats.json.listresponse._ import xyz.driver.pdsuidomain.formats.json.patientlabel._ - import xyz.driver.pdsuidomain.services.PatientLabelService._ def getAll(patientId: UuidId[Patient], filter: SearchFilterExpr = SearchFilterExpr.Empty, sorting: Option[Sorting] = None, pagination: Option[Pagination] = None)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetListReply] = { + implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[(Seq[RichPatientLabel], Int)] = { val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/patient/$patientId/label", @@ -37,7 +36,7 @@ class RestPatientLabelService(transport: ServiceTransport, baseUri: Uri)( response <- transport.sendRequestGetResponse(requestContext)(request) reply <- apiResponse[ListResponse[RichPatientLabel]](response) } yield { - GetListReply.EntityList(reply.items, reply.meta.itemsCount) + (reply.items, reply.meta.itemsCount) } } @@ -45,30 +44,30 @@ class RestPatientLabelService(transport: ServiceTransport, baseUri: Uri)( hypothesisId: UuidId[Hypothesis], pagination: Option[Pagination] = None)( implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo] - ): Future[GetDefiningCriteriaListReply] = { + ): Future[(Seq[PatientLabel], Int)] = { val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/patient/$patientId/hypothesis", paginationQuery(pagination))) for { response <- transport.sendRequestGetResponse(requestContext)(request) reply <- apiResponse[ListResponse[PatientLabel]](response) } yield { - GetDefiningCriteriaListReply.EntityList(reply.items, reply.meta.itemsCount) + (reply.items, reply.meta.itemsCount) } } def getByLabelIdOfPatient(patientId: UuidId[Patient], labelId: LongId[Label])( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetByLabelIdReply] = { + implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[RichPatientLabel] = { val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/patient/$patientId/label/$labelId")) for { response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[RichPatientLabel](response) + entity <- apiResponse[RichPatientLabel](response) } yield { - GetByLabelIdReply.Entity(reply) + entity } } def update(origPatientLabel: PatientLabel, draftPatientLabel: PatientLabel)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] = { + implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[RichPatientLabel] = { for { entity <- Marshal(draftPatientLabel).to[RequestEntity] request = HttpRequest( @@ -76,9 +75,9 @@ class RestPatientLabelService(transport: ServiceTransport, baseUri: Uri)( endpointUri(baseUri, s"/v1/patient/${origPatientLabel.patientId}/label/${origPatientLabel.labelId}")) .withEntity(entity) response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[RichPatientLabel](response) + entity <- apiResponse[RichPatientLabel](response) } yield { - UpdateReply.Updated(reply) + 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 index 8460872..5a54cca 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestPatientService.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestPatientService.scala @@ -1,5 +1,7 @@ package xyz.driver.pdsuidomain.services.rest +import java.time.LocalDateTime + import scala.concurrent.{ExecutionContext, Future} import akka.http.scaladsl.model._ import akka.stream.Materializer @@ -19,23 +21,21 @@ class RestPatientService(transport: ServiceTransport, baseUri: Uri)(implicit pro import xyz.driver.pdsuidomain.formats.json.listresponse._ import xyz.driver.pdsuidomain.formats.json.patient._ - import xyz.driver.pdsuidomain.services.PatientService._ - def getById(id: UuidId[Patient])( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetByIdReply] = { + implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[Patient] = { val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/patient/$id")) for { response <- transport.sendRequestGetResponse(requestContext)(request) - reply <- apiResponse[Patient](response) + entity <- apiResponse[Patient](response) } yield { - GetByIdReply.Entity(reply) + entity } } def getAll(filter: SearchFilterExpr = SearchFilterExpr.Empty, sorting: Option[Sorting] = None, pagination: Option[Pagination] = None)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetListReply] = { + implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[(Seq[Patient], Int, Option[LocalDateTime])] = { val request = HttpRequest( HttpMethods.GET, endpointUri(baseUri, "/v1/patient", filterQuery(filter) ++ sortingQuery(sorting) ++ paginationQuery(pagination))) @@ -43,38 +43,38 @@ class RestPatientService(transport: ServiceTransport, baseUri: Uri)(implicit pro response <- transport.sendRequestGetResponse(requestContext)(request) reply <- apiResponse[ListResponse[Patient]](response) } yield { - GetListReply.EntityList(reply.items, reply.meta.itemsCount, reply.meta.lastUpdate) + (reply.items, reply.meta.itemsCount, reply.meta.lastUpdate) } } private def editAction(orig: Patient, action: String)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] = { + 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) - reply <- apiResponse[Patient](response) + entity <- apiResponse[Patient](response) } yield { - UpdateReply.Updated(reply) + entity } } def unassign(origPatient: Patient)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] = + implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[Patient] = editAction(origPatient, "unassign") def start(origPatient: Patient)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] = + implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[Patient] = editAction(origPatient, "start") def submit(origPatient: Patient)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] = + implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[Patient] = editAction(origPatient, "submit") def restart(origPatient: Patient)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] = + implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[Patient] = editAction(origPatient, "restart") def flag(origPatient: Patient)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] = + implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[Patient] = editAction(origPatient, "flag") def resolve(origPatient: Patient)( - implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] = + implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[Patient] = editAction(origPatient, "resolve") } diff --git a/src/test/scala/xyz/driver/pdsuidomain/formats/json/PatientCriterionFormatSuite.scala b/src/test/scala/xyz/driver/pdsuidomain/formats/json/PatientCriterionFormatSuite.scala index 94d80c9..370173a 100644 --- a/src/test/scala/xyz/driver/pdsuidomain/formats/json/PatientCriterionFormatSuite.scala +++ b/src/test/scala/xyz/driver/pdsuidomain/formats/json/PatientCriterionFormatSuite.scala @@ -6,8 +6,7 @@ import spray.json._ import org.scalatest.{FlatSpec, Matchers} import xyz.driver.entities.labels.LabelValue import xyz.driver.pdsuicommon.domain.{LongId, StringId} -import xyz.driver.pdsuidomain.entities.{PatientCriterion, PatientCriterionArm} -import xyz.driver.pdsuidomain.services.PatientCriterionService.{DraftPatientCriterion, RichPatientCriterion} +import xyz.driver.pdsuidomain.entities.{DraftPatientCriterion, PatientCriterion, PatientCriterionArm, RichPatientCriterion} class PatientCriterionFormatSuite extends FlatSpec with Matchers { import xyz.driver.pdsuidomain.formats.json.patientcriterion._ diff --git a/src/test/scala/xyz/driver/pdsuidomain/formats/json/PatientEligibleTrialFormatSuite.scala b/src/test/scala/xyz/driver/pdsuidomain/formats/json/PatientEligibleTrialFormatSuite.scala index faef0f6..6f3bc19 100644 --- a/src/test/scala/xyz/driver/pdsuidomain/formats/json/PatientEligibleTrialFormatSuite.scala +++ b/src/test/scala/xyz/driver/pdsuidomain/formats/json/PatientEligibleTrialFormatSuite.scala @@ -6,8 +6,7 @@ import org.scalatest.{FlatSpec, Matchers} import spray.json._ import xyz.driver.entities.labels.LabelValue import xyz.driver.pdsuicommon.domain.{LongId, StringId, UuidId} -import xyz.driver.pdsuidomain.entities.{PatientCriterionArm, PatientTrialArmGroupView, Trial} -import xyz.driver.pdsuidomain.services.PatientEligibleTrialService.RichPatientEligibleTrial +import xyz.driver.pdsuidomain.entities.{PatientCriterionArm, PatientTrialArmGroupView, RichPatientEligibleTrial, Trial} class PatientEligibleTrialFormatSuite extends FlatSpec with Matchers { import xyz.driver.pdsuidomain.formats.json.patienteligibletrial._ diff --git a/src/test/scala/xyz/driver/pdsuidomain/formats/json/PatientLabelFormatSuite.scala b/src/test/scala/xyz/driver/pdsuidomain/formats/json/PatientLabelFormatSuite.scala index 289de53..9340d02 100644 --- a/src/test/scala/xyz/driver/pdsuidomain/formats/json/PatientLabelFormatSuite.scala +++ b/src/test/scala/xyz/driver/pdsuidomain/formats/json/PatientLabelFormatSuite.scala @@ -7,7 +7,6 @@ import org.scalatest.{FlatSpec, Matchers} import xyz.driver.entities.labels.LabelValue import xyz.driver.pdsuicommon.domain.{LongId, UuidId} import xyz.driver.pdsuidomain.entities._ -import xyz.driver.pdsuidomain.services.PatientLabelService.RichPatientLabel class PatientLabelFormatSuite extends FlatSpec with Matchers { -- cgit v1.2.3