diff options
Diffstat (limited to 'src/main/scala')
9 files changed, 75 insertions, 15 deletions
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/Document.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/Document.scala index eccb254..168eb38 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/entities/Document.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/entities/Document.scala @@ -419,6 +419,8 @@ object Document { providerTypeId <- Validators.nonEmpty("providerTypeId")(input.providerTypeId) + institutionName <- Validators.nonEmpty("institutionName")(input.institutionName) + meta <- Validators.nonEmpty("meta")(input.meta) startDate <- Validators.nonEmpty("startDate")(input.startDate) @@ -456,6 +458,7 @@ final case class Document(id: LongId[Document] = LongId(0L), providerName: Option[String], // not null providerTypeId: Option[LongId[ProviderType]], // not null requiredType: Option[Document.RequiredType], + institutionName: Option[String], meta: Option[TextJson[Meta]], // not null startDate: Option[LocalDate], // not null endDate: Option[LocalDate], diff --git a/src/main/scala/xyz/driver/pdsuidomain/fakes/entities/rep/DocumentGen.scala b/src/main/scala/xyz/driver/pdsuidomain/fakes/entities/rep/DocumentGen.scala index 1ac75ab..94eb029 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/fakes/entities/rep/DocumentGen.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/fakes/entities/rep/DocumentGen.scala @@ -68,6 +68,7 @@ object DocumentGen { providerName = nextOption(nextString()), providerTypeId = nextOption(nextLongId[ProviderType]), requiredType = nextOption(nextDocumentRequiredType()), + institutionName = nextOption(nextString()), meta = nextOption(nextDocumentMetaJson()), startDate = dates._1, endDate = dates._2, diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/document/ApiDocument.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/document/ApiDocument.scala index 1869ff3..3f1ecfe 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/document/ApiDocument.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/document/ApiDocument.scala @@ -2,7 +2,6 @@ package xyz.driver.pdsuidomain.formats.json.document import java.time.{LocalDate, ZoneId, ZonedDateTime} import xyz.driver.pdsuicommon.domain.{LongId, StringId, TextJson} -import xyz.driver.pdsuicommon.json.JsonSerializer import xyz.driver.pdsuidomain.entities._ import play.api.data.validation.ValidationError @@ -20,6 +19,7 @@ final case class ApiDocument(id: Long, provider: Option[String], providerTypeId: Option[Long], requiredType: Option[String], + institutionName: Option[String], status: Option[String], previousStatus: Option[String], assignee: Option[String], @@ -46,6 +46,7 @@ final case class ApiDocument(id: Long, providerName = this.provider, providerTypeId = this.providerTypeId.map(LongId(_)), requiredType = this.requiredType.map(extractRequiredType), + institutionName = this.institutionName, meta = this.meta.map(x => TextJson(JsonSerializer.deserialize[Document.Meta](x))), startDate = this.startDate, endDate = this.endDate, @@ -74,6 +75,7 @@ object ApiDocument { (JsPath \ "provider").formatNullable[String] and (JsPath \ "providerTypeId").formatNullable[Long] and (JsPath \ "requiredType").formatNullable[String] and + (JsPath \ "institutionName").formatNullable[String] and (JsPath \ "status").formatNullable(statusFormat) and (JsPath \ "previousStatus").formatNullable(statusFormat) and (JsPath \ "assignee").formatNullable[String] and @@ -96,6 +98,7 @@ object ApiDocument { provider = document.providerName, providerTypeId = document.providerTypeId.map(_.id), requiredType = document.requiredType.map(Document.RequiredType.requiredTypeToString), + institutionName = document.institutionName, status = Option(Document.Status.statusToString(document.status)), previousStatus = document.previousStatus.map(Document.Status.statusToString), assignee = document.assignee.map(_.id), diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/document/ApiPartialDocument.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/document/ApiPartialDocument.scala index eae0c62..032ddf6 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/document/ApiPartialDocument.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/document/ApiPartialDocument.scala @@ -23,6 +23,7 @@ final case class ApiPartialDocument(recordId: Option[Long], endDate: Tristate[LocalDate], provider: Tristate[String], providerTypeId: Tristate[Long], + institutionName: Tristate[String], status: Option[String], assignee: Tristate[String], meta: Tristate[String]) { @@ -42,6 +43,7 @@ final case class ApiPartialDocument(recordId: Option[Long], providerName = provider.cata(Some(_), None, orig.providerName), providerTypeId = providerTypeId.map(LongId[ProviderType]).cata(Some(_), None, orig.providerTypeId), requiredType = orig.requiredType, + institutionName = institutionName.cata(Some(_), None, orig.institutionName), meta = meta.cata(x => Some(TextJson(JsonSerializer.deserialize[Meta](x))), None, orig.meta), startDate = startDate.cata(Some(_), None, orig.startDate), endDate = endDate.cata(Some(_), None, orig.endDate), @@ -67,6 +69,7 @@ final case class ApiPartialDocument(recordId: Option[Long], providerName = provider.toOption, providerTypeId = providerTypeId.map(LongId[ProviderType]).toOption, requiredType = None, + institutionName = institutionName.toOption, meta = meta.map(x => TextJson(JsonSerializer.deserialize[Meta](x))).toOption, previousStatus = None, assignee = None, @@ -90,6 +93,7 @@ object ApiPartialDocument { (JsPath \ "endDate").readTristate[LocalDate] and (JsPath \ "provider").readTristate[String] and (JsPath \ "providerTypeId").readTristate[Long] and + (JsPath \ "institutionName").readTristate[String] and (JsPath \ "status").readNullable[String]( Reads .of[String] @@ -115,6 +119,7 @@ object ApiPartialDocument { (JsPath \ "endDate").writeTristate[LocalDate] and (JsPath \ "provider").writeTristate[String] and (JsPath \ "providerTypeId").writeTristate[Long] and + (JsPath \ "institutionName").writeTristate[String] and (JsPath \ "status").writeNullable[String] and (JsPath \ "assignee").writeTristate[String] and (JsPath \ "meta").writeTristate(Writes[String](Json.parse)) diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/document.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/document.scala index e3f6a9c..6c33fe5 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/document.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/document.scala @@ -40,7 +40,7 @@ object document { .fromString(name) .getOrElse(deserializationError(s"Unknown document type: $name")) - case _ => deserializationError(s"Expected Json Object as Intervention type, but got $json") + case _ => deserializationError(s"Expected Json Object as Document type, but got $json") } override def write(obj: DocumentType) = @@ -73,6 +73,11 @@ object document { .map(_.convertTo[Option[LongId[ProviderType]]]) .getOrElse(orig.providerTypeId) + val institutionName = fields + .get("institutionName") + .map(_.convertTo[Option[String]]) + .getOrElse(orig.institutionName) + val meta = fields .get("meta") .map(_.convertTo[Option[TextJson[Meta]]]) @@ -93,6 +98,7 @@ object document { typeId = typeId, providerName = provider, providerTypeId = providerTypeId, + institutionName = institutionName, meta = meta, startDate = startDate, endDate = endDate @@ -111,6 +117,7 @@ object document { "provider" -> document.providerName.toJson, "providerTypeId" -> document.providerTypeId.toJson, "requiredType" -> document.requiredType.toJson, + "institutionName" -> document.institutionName.toJson, "startDate" -> document.startDate.toJson, "endDate" -> document.endDate.toJson, "status" -> document.status.toJson, @@ -145,6 +152,10 @@ object document { .get("providerTypeId") .map(_.convertTo[LongId[ProviderType]]) + val institutionName = fields + .get("institutionName") + .map(_.convertTo[String]) + val meta = fields .get("meta") .map(_.convertTo[TextJson[Meta]]) @@ -168,6 +179,7 @@ object document { providerName = provider, providerTypeId = providerTypeId, requiredType = None, + institutionName = institutionName, meta = meta, previousStatus = None, assignee = None, diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/eligibility.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/eligibility.scala index b836e1c..3c2465f 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/eligibility.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/eligibility.scala @@ -21,7 +21,7 @@ object eligibility { implicit val clinicalDocumentFormat: RootJsonFormat[ClinicalEvidenceDocument] = jsonFormat7(ClinicalEvidenceDocument) implicit val evidenceDocumentFormat: RootJsonFormat[EvidenceDocument] = - GadtJsonFormat.create[EvidenceDocument]("documentType") { + GadtJsonFormat.create[EvidenceDocument]("evidenceDocumentType") { case _: MolecularEvidenceDocument => "Molecular" case _: ClinicalEvidenceDocument => "Clinical" } { diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/TrialService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/TrialService.scala index 5bd99a8..c6ab2d2 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/services/TrialService.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/services/TrialService.scala @@ -68,6 +68,20 @@ object TrialService { extends GetTrialWithLabelsReply with DomainError.AuthorizationError with DefaultAccessDeniedError } + sealed trait GetTrialsWithLabelsReply + object GetTrialsWithLabelsReply { + type Error = GetTrialsWithLabelsReply with DomainError + + final case class EntityList(xs: Seq[ExportTrialWithLabels]) extends GetTrialsWithLabelsReply + + case object NotFoundError extends GetTrialsWithLabelsReply with DomainError.NotFoundError { + def userMessage: String = "Trials for disease are not found" + } + + case object AuthorizationError + extends GetTrialsWithLabelsReply with DomainError.AuthorizationError with DefaultAccessDeniedError + } + sealed trait UpdateReply object UpdateReply { type Error = UpdateReply with DomainError @@ -97,6 +111,9 @@ trait TrialService { def getTrialWithLabels(trialId: StringId[Trial], condition: String)( implicit requestContext: AuthenticatedRequestContext): Future[GetTrialWithLabelsReply] + def getTrialsWithLabels(condition: String)( + implicit requestContext: AuthenticatedRequestContext): Future[GetTrialsWithLabelsReply] + def getPdfSource(trialId: StringId[Trial])( implicit requestContext: AuthenticatedRequestContext): Future[Source[ByteString, NotUsed]] diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/fake/FakeTrialService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/fake/FakeTrialService.scala index 9aeb820..cd62d48 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/services/fake/FakeTrialService.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/services/fake/FakeTrialService.scala @@ -58,19 +58,27 @@ class FakeTrialService extends TrialService { Future.successful(GetListReply.EntityList(Seq(trial), 1, None)) override def getTrialWithLabels(trialId: StringId[Trial], condition: String)( - implicit requestContext: AuthenticatedRequestContext): Future[GetTrialWithLabelsReply] = { - Future.successful( - GetTrialWithLabelsReply.Entity(ExportTrialWithLabels( - StringId[Trial]("NCT" + generators.nextInt(999999).toString), - UuidId[Trial](generators.nextUuid()), - generators.oneOf("adenocarcinoma", "breast", "prostate"), - LocalDateTime.now(), - labelVersion = 1L, - generators.listOf(new ExportTrialArm( + implicit requestContext: AuthenticatedRequestContext): Future[GetTrialWithLabelsReply] = + Future.successful(GetTrialWithLabelsReply.Entity(nextExportTrialWithLabels())) + + override def getTrialsWithLabels(condition: String)( + implicit requestContext: AuthenticatedRequestContext): Future[GetTrialsWithLabelsReply] = + Future.successful(GetTrialsWithLabelsReply.EntityList(generators.seqOf(nextExportTrialWithLabels()))) + + private def nextExportTrialWithLabels() = + ExportTrialWithLabels( + StringId[Trial]("NCT" + generators.nextInt(999999).toString), + UuidId[Trial](generators.nextUuid()), + generators.oneOf("adenocarcinoma", "breast", "prostate"), + LocalDateTime.now(), + labelVersion = 1L, + generators.listOf( + new ExportTrialArm( LongId[Arm](generators.nextInt(999999).toLong), generators.nextName().value )), - generators.listOf(new ExportTrialLabelCriterion( + generators.listOf( + new ExportTrialLabelCriterion( LongId[Criterion](generators.nextInt(999999).toLong), generators.nextOption(generators.nextBoolean()), LongId[Label](generators.nextInt(999999).toLong), @@ -79,8 +87,7 @@ class FakeTrialService extends TrialService { generators.nextBoolean(), generators.nextBoolean() )) - ))) - } + ) def update(origTrial: Trial, draftTrial: Trial)( implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] = diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestTrialService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestTrialService.scala index 7e33919..42f32fc 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestTrialService.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestTrialService.scala @@ -16,6 +16,7 @@ import xyz.driver.pdsuidomain.entities.export.trial.ExportTrialWithLabels import xyz.driver.pdsuidomain.formats.json.ListResponse import xyz.driver.pdsuidomain.formats.json.trial.ApiTrial import xyz.driver.pdsuidomain.services.TrialService +import spray.json.DefaultJsonProtocol._ import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._ import xyz.driver.pdsuidomain.formats.json.sprayformats.export._ @@ -47,6 +48,17 @@ class RestTrialService(transport: ServiceTransport, baseUri: Uri)(implicit prote } } + def getTrialsWithLabels(disease: String)( + implicit requestContext: AuthenticatedRequestContext): Future[GetTrialsWithLabelsReply] = { + val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/export/trial/$disease")) + for { + response <- transport.sendRequestGetResponse(requestContext)(request) + reply <- apiResponse[Seq[ExportTrialWithLabels]](response) + } yield { + GetTrialsWithLabelsReply.EntityList(reply) + } + } + def getPdfSource(trialId: StringId[Trial])( implicit requestContext: AuthenticatedRequestContext): Future[Source[ByteString, NotUsed]] = { val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/trial/$trialId/source")) |