aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--build.sbt2
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/Document.scala3
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/fakes/entities/rep/DocumentGen.scala1
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/document/ApiDocument.scala5
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/document/ApiPartialDocument.scala5
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/document.scala14
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/eligibility.scala2
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/TrialService.scala17
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/fake/FakeTrialService.scala31
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/rest/RestTrialService.scala12
-rw-r--r--src/test/scala/xyz/driver/pdsuidomain/DocumentSuite.scala1
-rw-r--r--src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/DocumentFormatSuite.scala6
12 files changed, 81 insertions, 18 deletions
diff --git a/build.sbt b/build.sbt
index 66c0f7b..f820bcc 100644
--- a/build.sbt
+++ b/build.sbt
@@ -19,7 +19,7 @@ lazy val core = (project in file("."))
"org.davidbild" %% "tristate-core" % "0.2.0",
"org.davidbild" %% "tristate-play" % "0.2.0" exclude ("com.typesafe.play", "play-json"),
"xyz.driver" %% "core" % "1.2.1",
- "xyz.driver" %% "domain-model" % "0.17.1",
+ "xyz.driver" %% "domain-model" % "0.17.5",
"ch.qos.logback" % "logback-classic" % "1.1.7",
"com.fasterxml.jackson.datatype" % "jackson-datatype-jsr310" % "2.8.4",
"com.github.spullara.mustache.java" % "scala-extensions-2.11" % "0.9.4",
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"))
diff --git a/src/test/scala/xyz/driver/pdsuidomain/DocumentSuite.scala b/src/test/scala/xyz/driver/pdsuidomain/DocumentSuite.scala
index f851680..9fc3388 100644
--- a/src/test/scala/xyz/driver/pdsuidomain/DocumentSuite.scala
+++ b/src/test/scala/xyz/driver/pdsuidomain/DocumentSuite.scala
@@ -78,6 +78,7 @@ class DocumentSuite extends BaseSuite {
providerName = Some("etst"),
providerTypeId = Some(LongId(123)),
requiredType = None,
+ institutionName = Some("institution name"),
startDate = Some(lastUpdate.toLocalDate.minusDays(2)),
endDate = None,
lastUpdate = lastUpdate,
diff --git a/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/DocumentFormatSuite.scala b/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/DocumentFormatSuite.scala
index 9394735..cc1832c 100644
--- a/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/DocumentFormatSuite.scala
+++ b/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/DocumentFormatSuite.scala
@@ -24,6 +24,7 @@ class DocumentFormatSuite extends FlatSpec with Matchers {
typeId = Some(LongId(10)),
providerName = Some("provider 21"),
providerTypeId = Some(LongId(21)),
+ institutionName = Some("institution name"),
requiredType = Some(Document.RequiredType.OPN),
meta = None,
startDate = None,
@@ -33,7 +34,7 @@ class DocumentFormatSuite extends FlatSpec with Matchers {
writtenJson should be (
"""{"id":1,"recordId":101,"physician":"physician","typeId":10,"provider":"provider 21","providerTypeId":21,
- "requiredType":"OPN","startDate":null,"endDate":null,"status":"New","assignee":null,"previousStatus":null,
+ "requiredType":"OPN","institutionName":"institution name","startDate":null,"endDate":null,"status":"New","assignee":null,"previousStatus":null,
"previousAssignee":null,"lastActiveUser":null,"lastUpdate":"2017-08-10T18:00Z","meta":null}""".parseJson)
val createDocumentJson =
@@ -41,7 +42,8 @@ class DocumentFormatSuite extends FlatSpec with Matchers {
val expectedCreatedDocument = orig.copy(
id = LongId(0),
lastUpdate = LocalDateTime.MIN,
- requiredType = None
+ requiredType = None,
+ institutionName = None
)
val parsedCreatedDocument = documentFormat.read(createDocumentJson)
parsedCreatedDocument should be(expectedCreatedDocument)