diff options
author | Kseniya Tomskikh <ktomskih@datamonsters.co> | 2017-10-20 16:25:04 +0700 |
---|---|---|
committer | Kseniya Tomskikh <ktomskih@datamonsters.co> | 2017-10-20 16:25:04 +0700 |
commit | 54b15dae509212f6661dc1f1bc4ca248cb487443 (patch) | |
tree | 85b1ceafd9a56da511513797bd263977f52b556c /src/main/scala/xyz/driver/pdsuidomain/formats/json | |
parent | 6d6e732368e97e319653f00e498189afceeb4671 (diff) | |
download | rest-query-54b15dae509212f6661dc1f1bc4ca248cb487443.tar.gz rest-query-54b15dae509212f6661dc1f1bc4ca248cb487443.tar.bz2 rest-query-54b15dae509212f6661dc1f1bc4ca248cb487443.zip |
PDSUI-2336 Deleted api classes of play format, userhistory and message services
Diffstat (limited to 'src/main/scala/xyz/driver/pdsuidomain/formats/json')
99 files changed, 57 insertions, 3147 deletions
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/ListResponse.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/ListResponse.scala deleted file mode 100644 index 3fbeac8..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/ListResponse.scala +++ /dev/null @@ -1,56 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json - -import java.time.LocalDateTime - -import xyz.driver.pdsuicommon.db.Pagination -import xyz.driver.pdsuicommon.json.Serialization.seqJsonFormat -import play.api.libs.functional.syntax._ -import play.api.libs.json._ - -final case class ListResponse[+T](items: Seq[T], meta: ListResponse.Meta) - -object ListResponse { - - final case class Meta(itemsCount: Int, pageNumber: Int, pageSize: Int, lastUpdate: Option[LocalDateTime]) - - object Meta { - def apply(itemsCount: Int, pagination: Pagination, lastUpdate: Option[LocalDateTime]): Meta = { - Meta(itemsCount, pagination.pageNumber, pagination.pageSize, lastUpdate) - } - } - - private val listResponseMetaJsonReads: Reads[Meta] = { - ((JsPath \ "itemsCount").read[Int] and - (JsPath \ "pageNumber").read[Int] and - (JsPath \ "pageSize").read[Int] and - (JsPath \ "lastUpdate").readNullable[LocalDateTime]).apply { - (itemsCount: Int, pageNumber: Int, pageSize: Int, lastUpdate: Option[LocalDateTime]) => - Meta(itemsCount, pageNumber, pageSize, lastUpdate) - } - } - - implicit val listResponseMetaJsonWrites: Writes[Meta] = ( - (JsPath \ "itemsCount").write[Int] and - (JsPath \ "pageNumber").write[Int] and - (JsPath \ "pageSize").write[Int] and - (JsPath \ "lastUpdate").write[Option[LocalDateTime]] - )(unlift(Meta.unapply)) - - implicit val listResponseMetaJsonFormat: Format[Meta] = Format( - listResponseMetaJsonReads, - listResponseMetaJsonWrites - ) - - implicit def listResponseJsonWrites[T](implicit f: Writes[T]): Writes[ListResponse[T]] = - ( - (JsPath \ "items").write[Seq[T]] and - (JsPath \ "meta").write[Meta] - )(unlift(ListResponse.unapply[T])) - - implicit def listResponseJsonFormat[T](implicit f: Format[T]): Format[ListResponse[T]] = - ( - (JsPath \ "items").format(seqJsonFormat[T]) and - (JsPath \ "meta").format[Meta] - )(ListResponse.apply[T], unlift(ListResponse.unapply[T])) - -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/arm.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/arm.scala index e182b4b..0b54309 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/arm.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/arm.scala @@ -1,4 +1,4 @@ -package xyz.driver.pdsuidomain.formats.json.sprayformats +package xyz.driver.pdsuidomain.formats.json import spray.json._ import xyz.driver.pdsuicommon.domain.{LongId, StringId} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/arm/ApiArm.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/arm/ApiArm.scala deleted file mode 100644 index 32e2b54..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/arm/ApiArm.scala +++ /dev/null @@ -1,35 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.arm - -import xyz.driver.pdsuicommon.domain.{LongId, StringId} -import xyz.driver.pdsuidomain.entities.Arm -import play.api.libs.functional.syntax._ -import play.api.libs.json._ - -final case class ApiArm(id: Long, name: String, originalName: String, trialId: String) { - - def toDomain: Arm = Arm( - id = LongId(this.id), - name = this.name, - originalName = this.originalName, - trialId = StringId(this.trialId), - deleted = None // if we have an ApiArm object, the Arm itself has not been deleted - ) - -} - -object ApiArm { - - implicit val format: Format[ApiArm] = ( - (JsPath \ "id").format[Long] and - (JsPath \ "name").format[String] and - (JsPath \ "originalName").format[String] and - (JsPath \ "trialId").format[String] - )(ApiArm.apply, unlift(ApiArm.unapply)) - - def fromDomain(arm: Arm): ApiArm = ApiArm( - id = arm.id.id, - name = arm.name, - originalName = arm.originalName, - trialId = arm.trialId.id - ) -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/arm/ApiCreateArm.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/arm/ApiCreateArm.scala deleted file mode 100644 index 5168e94..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/arm/ApiCreateArm.scala +++ /dev/null @@ -1,20 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.arm - -import xyz.driver.pdsuicommon.domain.{LongId, StringId} -import xyz.driver.pdsuidomain.entities.Arm -import play.api.libs.json.{Format, Json} - -final case class ApiCreateArm(name: String, trialId: String) { - - def toDomain = Arm( - id = LongId(0), - name = name, - trialId = StringId(trialId), - originalName = name - ) -} - -object ApiCreateArm { - - implicit val format: Format[ApiCreateArm] = Json.format[ApiCreateArm] -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/arm/ApiPartialArm.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/arm/ApiPartialArm.scala deleted file mode 100644 index f85d7ff..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/arm/ApiPartialArm.scala +++ /dev/null @@ -1,14 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.arm - -import xyz.driver.pdsuidomain.entities.Arm -import play.api.libs.json.{Format, Json} - -final case class ApiPartialArm(name: String) { - - def applyTo(arm: Arm): Arm = arm.copy(name = name) -} - -object ApiPartialArm { - - implicit val format: Format[ApiPartialArm] = Json.format -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/bridgeuploadqueue.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/bridgeuploadqueue.scala index 77fb4d2..6725a15 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/bridgeuploadqueue.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/bridgeuploadqueue.scala @@ -1,4 +1,4 @@ -package xyz.driver.pdsuidomain.formats.json.sprayformats +package xyz.driver.pdsuidomain.formats.json import java.time.LocalDateTime diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/common.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/common.scala index 61e0e7f..26adb9c 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/common.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/common.scala @@ -1,4 +1,4 @@ -package xyz.driver.pdsuidomain.formats.json.sprayformats +package xyz.driver.pdsuidomain.formats.json import java.time.{LocalDate, LocalDateTime, ZoneId, ZonedDateTime} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/criterion.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/criterion.scala index acf952d..d7acfd4 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/criterion.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/criterion.scala @@ -1,4 +1,4 @@ -package xyz.driver.pdsuidomain.formats.json.sprayformats +package xyz.driver.pdsuidomain.formats.json import spray.json._ import xyz.driver.entities.labels.{Label, LabelCategory} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/criterion/ApiCriterion.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/criterion/ApiCriterion.scala deleted file mode 100644 index 239adb1..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/criterion/ApiCriterion.scala +++ /dev/null @@ -1,59 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.criterion - -import xyz.driver.pdsuicommon.json.Serialization.seqJsonFormat -import play.api.libs.functional.syntax._ -import play.api.libs.json._ -import xyz.driver.pdsuicommon.domain.{LongId, StringId} -import xyz.driver.pdsuidomain.entities.{EligibilityArm, Criterion, Trial} -import xyz.driver.pdsuidomain.formats.json.label.ApiCriterionLabel -import xyz.driver.pdsuidomain.services.CriterionService.RichCriterion - -final case class ApiCriterion(id: Long, - meta: Option[String], - arms: Seq[Long], - text: Option[String], - isCompound: Boolean, - labels: Seq[ApiCriterionLabel], - trialId: String, - inclusion: Option[Boolean]) { - - def toDomain = RichCriterion( - criterion = Criterion( - id = LongId[Criterion](id), - trialId = StringId[Trial](trialId), - text, - isCompound, - meta.getOrElse(""), - inclusion - ), - armIds = arms.map(LongId[EligibilityArm]), - labels = labels.map(_.toDomain(LongId[Criterion](id))) - ) -} - -object ApiCriterion { - - implicit val format: Format[ApiCriterion] = ( - (JsPath \ "id").format[Long] and - (JsPath \ "meta").formatNullable(Format(Reads { x => - JsSuccess(Json.stringify(x)) - }, Writes[String](Json.parse))) and - (JsPath \ "arms").format(seqJsonFormat[Long]) and - (JsPath \ "text").formatNullable[String] and - (JsPath \ "isCompound").format[Boolean] and - (JsPath \ "labels").format(seqJsonFormat[ApiCriterionLabel]) and - (JsPath \ "trialId").format[String] and - (JsPath \ "inclusion").formatNullable[Boolean] - )(ApiCriterion.apply, unlift(ApiCriterion.unapply)) - - def fromDomain(richCriterion: RichCriterion) = ApiCriterion( - id = richCriterion.criterion.id.id, - meta = Option(richCriterion.criterion.meta), - arms = richCriterion.armIds.map(_.id), - text = richCriterion.criterion.text, - isCompound = richCriterion.criterion.isCompound, - labels = richCriterion.labels.map(ApiCriterionLabel.fromDomain), - trialId = richCriterion.criterion.trialId.id, - inclusion = richCriterion.criterion.inclusion - ) -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/criterion/ApiNewCriterion.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/criterion/ApiNewCriterion.scala deleted file mode 100644 index 4b85f83..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/criterion/ApiNewCriterion.scala +++ /dev/null @@ -1,46 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.criterion - -import xyz.driver.pdsuicommon.domain.{LongId, StringId} -import xyz.driver.pdsuicommon.json.Serialization.seqJsonFormat -import xyz.driver.pdsuidomain.entities._ -import play.api.libs.functional.syntax._ -import play.api.libs.json._ -import xyz.driver.pdsuidomain.formats.json.label.ApiCriterionLabel -import xyz.driver.pdsuidomain.services.CriterionService.RichCriterion - -final case class ApiNewCriterion(meta: Option[String], - arms: Option[Seq[Long]], - text: Option[String], - isCompound: Option[Boolean], - labels: Seq[ApiCriterionLabel], - trialId: String, - inclusion: Option[Boolean]) { - - def toDomain = RichCriterion( - criterion = Criterion( - id = LongId(0L), - meta = meta.getOrElse(""), - trialId = StringId(trialId), - isCompound = isCompound.getOrElse(false), - text = text, - inclusion = inclusion - ), - armIds = arms.getOrElse(Seq.empty).map(LongId[EligibilityArm]), - labels = labels.map(_.toDomain(LongId(Long.MaxValue))) // A developer should specify right criterionId himself - ) -} - -object ApiNewCriterion { - - implicit val format: Format[ApiNewCriterion] = ( - (JsPath \ "meta").formatNullable(Format(Reads { x => - JsSuccess(Json.stringify(x)) - }, Writes[String](Json.parse))) and - (JsPath \ "arms").formatNullable(seqJsonFormat[Long]) and - (JsPath \ "text").formatNullable[String] and - (JsPath \ "isCompound").formatNullable[Boolean] and - (JsPath \ "labels").format(seqJsonFormat[ApiCriterionLabel]) and - (JsPath \ "trialId").format[String] and - (JsPath \ "inclusion").formatNullable[Boolean] - )(ApiNewCriterion.apply, unlift(ApiNewCriterion.unapply)) -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/criterion/ApiUpdateCriterion.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/criterion/ApiUpdateCriterion.scala deleted file mode 100644 index a700309..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/criterion/ApiUpdateCriterion.scala +++ /dev/null @@ -1,64 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.criterion - -import xyz.driver.pdsuicommon.domain.LongId -import xyz.driver.pdsuicommon.json.Serialization.seqJsonFormat -import xyz.driver.pdsuidomain.entities.{EligibilityArm, Criterion} -import org.davidbild.tristate._ -import org.davidbild.tristate.contrib.play.ToJsPathOpsFromJsPath -import play.api.libs.functional.syntax._ -import play.api.libs.json._ -import xyz.driver.pdsuidomain.formats.json.label.ApiCriterionLabel -import xyz.driver.pdsuidomain.services.CriterionService.RichCriterion - -final case class ApiUpdateCriterion(meta: Tristate[String], - arms: Tristate[Seq[Long]], - text: Option[String], - isCompound: Option[Boolean], - inclusion: Tristate[Boolean], - labels: Tristate[Seq[ApiCriterionLabel]]) { - - def applyTo(orig: RichCriterion): RichCriterion = RichCriterion( - criterion = applyTo(orig.criterion), - armIds = arms.cata(_.map(LongId[EligibilityArm]), Seq.empty, orig.armIds), - labels = labels.cata(_.map(_.toDomain(orig.criterion.id)), Seq.empty, orig.labels) - ) - - private def applyTo(orig: Criterion): Criterion = Criterion( - id = orig.id, - meta = meta.cata(identity, "{}", orig.meta), - text = text.orElse(orig.text), - isCompound = isCompound.getOrElse(orig.isCompound), - trialId = orig.trialId, - inclusion = inclusion.cata(x => Some(x), None, orig.inclusion) - ) -} - -object ApiUpdateCriterion { - - private val reads: Reads[ApiUpdateCriterion] = ( - (JsPath \ "meta") - .readTristate(Reads { x => - JsSuccess(Json.stringify(x)) - }) - .map { - case Tristate.Present("{}") => Tristate.Absent - case x => x - } and - (JsPath \ "arms").readTristate(seqJsonFormat[Long]) and - (JsPath \ "text").readNullable[String] and - (JsPath \ "isCompound").readNullable[Boolean] and - (JsPath \ "inclusion").readTristate[Boolean] and - (JsPath \ "labels").readTristate(seqJsonFormat[ApiCriterionLabel]) - )(ApiUpdateCriterion.apply _) - - private val writes: Writes[ApiUpdateCriterion] = ( - (JsPath \ "meta").writeTristate(Writes[String](Json.parse)) and - (JsPath \ "arms").writeTristate(seqJsonFormat[Long]) and - (JsPath \ "text").writeNullable[String] and - (JsPath \ "isCompound").writeNullable[Boolean] and - (JsPath \ "inclusion").writeTristate[Boolean] and - (JsPath \ "labels").writeTristate(seqJsonFormat[ApiCriterionLabel]) - )(unlift(ApiUpdateCriterion.unapply)) - - implicit val format: Format[ApiUpdateCriterion] = Format(reads, writes) -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/document.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/document.scala index c584b96..aaca391 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/document.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/document.scala @@ -1,4 +1,4 @@ -package xyz.driver.pdsuidomain.formats.json.sprayformats +package xyz.driver.pdsuidomain.formats.json import java.time.{LocalDate, LocalDateTime} 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 deleted file mode 100644 index 250e650..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/document/ApiDocument.scala +++ /dev/null @@ -1,114 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.document - -import java.time.{LocalDate, ZoneId, ZonedDateTime} -import xyz.driver.pdsuicommon.domain.{LongId, StringId, TextJson} - -import xyz.driver.pdsuidomain.entities._ -import play.api.data.validation.ValidationError -import play.api.libs.functional.syntax._ -import play.api.libs.json._ -import xyz.driver.pdsuicommon.json.JsonSerializer - -final case class ApiDocument(id: Long, - recordId: Long, - physician: Option[String], - lastUpdate: ZonedDateTime, - typeId: Option[Long], - startDate: Option[LocalDate], - endDate: Option[LocalDate], - provider: Option[String], - providerTypeId: Option[Long], - requiredType: Option[String], - institutionName: Option[String], - status: Option[String], - previousStatus: Option[String], - assignee: Option[String], - previousAssignee: Option[String], - lastActiveUser: Option[String], - meta: Option[String], - labelVersion: Int) { - - private def extractStatus(status: String): Document.Status = - Document.Status.fromString(status).getOrElse(throw new NoSuchElementException(s"Status $status unknown")) - - private def extractRequiredType(tpe: String): Document.RequiredType = - Document.RequiredType.fromString(tpe).getOrElse(throw new NoSuchElementException(s"RequitedType $tpe unknown")) - - def toDomain = Document( - id = LongId(this.id), - status = extractStatus(this.status.getOrElse("")), - previousStatus = previousStatus.map(extractStatus), - assignee = this.assignee.map(StringId(_)), - previousAssignee = this.previousAssignee.map(StringId(_)), - lastActiveUserId = this.lastActiveUser.map(StringId(_)), - recordId = LongId(this.recordId), - physician = this.physician, - typeId = this.typeId.map(LongId(_)), - 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, - lastUpdate = this.lastUpdate.toLocalDateTime(), - labelVersion = this.labelVersion - ) - -} - -object ApiDocument { - - private val statusFormat = Format( - Reads.StringReads.filter(ValidationError("unknown status")) { x => - Document.Status.fromString(x).isDefined - }, - Writes.StringWrites - ) - - implicit val format: Format[ApiDocument] = ( - (JsPath \ "id").format[Long] and - (JsPath \ "recordId").format[Long] and - (JsPath \ "physician").formatNullable[String] and - (JsPath \ "lastUpdate").format[ZonedDateTime] and - (JsPath \ "typeId").formatNullable[Long] and - (JsPath \ "startDate").formatNullable[LocalDate] and - (JsPath \ "endDate").formatNullable[LocalDate] and - (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 - (JsPath \ "previousAssignee").formatNullable[String] and - (JsPath \ "lastActiveUser").formatNullable[String] and - (JsPath \ "meta").formatNullable(Format(Reads { x => - JsSuccess(Json.stringify(x)) - }, Writes[String](Json.parse))) and - (JsPath \ "labelVersion").format[Int] - )(ApiDocument.apply, unlift(ApiDocument.unapply)) - - def fromDomain(document: Document): ApiDocument = { - ApiDocument( - id = document.id.id, - recordId = document.recordId.id, - physician = document.physician, - lastUpdate = ZonedDateTime.of(document.lastUpdate, ZoneId.of("Z")), - typeId = document.typeId.map(_.id), - startDate = document.startDate, - endDate = document.endDate, - 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), - previousAssignee = document.previousAssignee.map(_.id), - lastActiveUser = document.lastActiveUserId.map(_.id), - meta = document.meta.map(meta => JsonSerializer.serialize(meta.content)), - labelVersion = document.labelVersion - ) - } -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/document/ApiDocumentType.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/document/ApiDocumentType.scala deleted file mode 100644 index 22bea6b..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/document/ApiDocumentType.scala +++ /dev/null @@ -1,27 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.document - -import play.api.libs.functional.syntax._ -import play.api.libs.json.{Format, JsPath} -import xyz.driver.pdsuidomain.entities.DocumentType - -final case class ApiDocumentType(id: Long, name: String) { - - def toDomain: DocumentType = - DocumentType - .fromString(name) - .getOrElse(throw new IllegalArgumentException(s"Unknown document type name $name")) - -} - -object ApiDocumentType { - - implicit val format: Format[ApiDocumentType] = ( - (JsPath \ "id").format[Long] and - (JsPath \ "name").format[String] - )(ApiDocumentType.apply, unlift(ApiDocumentType.unapply)) - - def fromDomain(documentType: DocumentType) = ApiDocumentType( - id = documentType.id.id, - name = documentType.name - ) -} 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 deleted file mode 100644 index ecbdaed..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/document/ApiPartialDocument.scala +++ /dev/null @@ -1,131 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.document - -import java.time.{LocalDate, LocalDateTime} - -import org.davidbild.tristate.Tristate -import org.davidbild.tristate.contrib.play.ToJsPathOpsFromJsPath -import play.api.data.validation._ -import play.api.libs.functional.syntax._ -import play.api.libs.json._ -import xyz.driver.pdsuicommon.domain.{LongId, StringId, TextJson} -import xyz.driver.pdsuicommon.json.{JsonSerializer, JsonValidationException} -import xyz.driver.pdsuicommon.validation.{AdditionalConstraints, JsonValidationErrors} -import xyz.driver.pdsuidomain.entities.Document.Meta -import xyz.driver.pdsuidomain.entities._ - -import scala.collection.breakOut -import scala.util.Try - -final case class ApiPartialDocument(recordId: Option[Long], - physician: Option[String], - typeId: Tristate[Long], - startDate: Tristate[LocalDate], - endDate: Tristate[LocalDate], - provider: Tristate[String], - providerTypeId: Tristate[Long], - institutionName: Tristate[String], - status: Option[String], - assignee: Tristate[String], - meta: Tristate[String]) { - - import xyz.driver.pdsuicommon.domain.User - - def applyTo(orig: Document): Document = Document( - id = orig.id, - status = status.flatMap(Document.Status.fromString).getOrElse(orig.status), - previousStatus = orig.previousStatus, - assignee = assignee.map(StringId[User]).cata(Some(_), None, orig.assignee), - previousAssignee = orig.previousAssignee, - lastActiveUserId = orig.lastActiveUserId, - recordId = recordId.map(LongId[MedicalRecord]).getOrElse(orig.recordId), - physician = physician.orElse(orig.physician), - typeId = typeId.map(LongId[DocumentType]).cata(Some(_), None, orig.typeId), - 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), - lastUpdate = LocalDateTime.MIN, // Should update internally in a business logic module, - labelVersion = orig.labelVersion - ) - - def toDomain: Try[Document] = Try { - val validation = Map(JsPath \ "recordId" -> AdditionalConstraints.optionNonEmptyConstraint(recordId)) - - val validationErrors: JsonValidationErrors = validation.collect({ - case (fieldName, e: Invalid) => (fieldName, e.errors) - })(breakOut) - - if (validationErrors.isEmpty) { - Document( - id = LongId(0), - recordId = recordId.map(LongId[MedicalRecord]).get, - status = Document.Status.New, - physician = physician, - typeId = typeId.map(LongId[DocumentType]).toOption, - startDate = startDate.toOption, - endDate = endDate.toOption, - 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, - previousAssignee = None, - lastActiveUserId = None, - lastUpdate = LocalDateTime.MIN, - labelVersion = 0 - ) - } else { - throw new JsonValidationException(validationErrors) - } - } -} - -object ApiPartialDocument { - - private val reads: Reads[ApiPartialDocument] = ( - (JsPath \ "recordId").readNullable[Long] and - (JsPath \ "physician").readNullable[String] and - (JsPath \ "typeId").readTristate[Long] and - (JsPath \ "startDate").readTristate[LocalDate] and - (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] - .filter(ValidationError("unknown status"))( - Document.Status.fromString(_).isDefined - )) and - (JsPath \ "assignee").readTristate[String] and - (JsPath \ "meta") - .readTristate(Reads { x => - JsSuccess(Json.stringify(x)) - }) - .map { - case Tristate.Present("{}") => Tristate.Absent - case x => x - } - )(ApiPartialDocument.apply _) - - private val writes: Writes[ApiPartialDocument] = ( - (JsPath \ "recordId").writeNullable[Long] and - (JsPath \ "physician").writeNullable[String] and - (JsPath \ "typeId").writeTristate[Long] and - (JsPath \ "startDate").writeTristate[LocalDate] and - (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)) - )(unlift(ApiPartialDocument.unapply)) - - implicit val format: Format[ApiPartialDocument] = Format(reads, writes) -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/document/ApiProviderType.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/document/ApiProviderType.scala deleted file mode 100644 index 9c0c216..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/document/ApiProviderType.scala +++ /dev/null @@ -1,27 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.document - -import play.api.libs.functional.syntax._ -import play.api.libs.json.{Format, JsPath} -import xyz.driver.pdsuidomain.entities.ProviderType - -final case class ApiProviderType(id: Long, name: String) { - - def toDomain: ProviderType = - ProviderType - .fromString(name) - .getOrElse(throw new IllegalArgumentException(s"Unknown provider type name $name")) - -} - -object ApiProviderType { - - implicit val format: Format[ApiProviderType] = ( - (JsPath \ "id").format[Long] and - (JsPath \ "name").format[String] - )(ApiProviderType.apply, unlift(ApiProviderType.unapply)) - - def fromDomain(providerType: ProviderType) = ApiProviderType( - id = providerType.id.id, - name = providerType.name - ) -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/documenthistory.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/documenthistory.scala index 419c252..a0eb3f5 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/documenthistory.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/documenthistory.scala @@ -1,4 +1,4 @@ -package xyz.driver.pdsuidomain.formats.json.sprayformats +package xyz.driver.pdsuidomain.formats.json import spray.json._ import xyz.driver.core.json.EnumJsonFormat @@ -6,8 +6,8 @@ import xyz.driver.pdsuidomain.entities._ object documenthistory { import DefaultJsonProtocol._ - import common._ import DocumentHistory._ + import common._ implicit val documentStateFormat = new EnumJsonFormat[State]( "Extract" -> State.Extract, diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/documenthistory/ApiDocumentHistory.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/documenthistory/ApiDocumentHistory.scala deleted file mode 100644 index 5aae774..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/documenthistory/ApiDocumentHistory.scala +++ /dev/null @@ -1,27 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.documenthistory - -import java.time.{ZoneId, ZonedDateTime} - -import play.api.libs.json.{Format, Json} -import xyz.driver.pdsuidomain.entities.DocumentHistory - -final case class ApiDocumentHistory(id: Long, - executor: String, - documentId: Long, - state: String, - action: String, - created: ZonedDateTime) - -object ApiDocumentHistory { - implicit val format: Format[ApiDocumentHistory] = - Json.format[ApiDocumentHistory] - - def fromDomain(x: DocumentHistory) = ApiDocumentHistory( - id = x.id.id, - executor = x.executor.id, - documentId = x.documentId.id, - state = DocumentHistory.State.stateToString(x.state), - action = DocumentHistory.Action.actionToString(x.action), - created = ZonedDateTime.of(x.created, ZoneId.of("Z")) - ) -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/documentissue.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/documentissue.scala index a658cfa..082fa83 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/documentissue.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/documentissue.scala @@ -1,4 +1,4 @@ -package xyz.driver.pdsuidomain.formats.json.sprayformats +package xyz.driver.pdsuidomain.formats.json import java.time.LocalDateTime diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/documentissue/ApiDocumentIssue.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/documentissue/ApiDocumentIssue.scala deleted file mode 100644 index f157bb2..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/documentissue/ApiDocumentIssue.scala +++ /dev/null @@ -1,40 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.documentissue - -import java.time.{ZoneId, ZonedDateTime} - -import play.api.libs.functional.syntax._ -import play.api.libs.json._ -import xyz.driver.pdsuidomain.entities.DocumentIssue - -final case class ApiDocumentIssue(id: Long, - startPage: Option[Double], - endPage: Option[Double], - text: String, - lastUpdate: ZonedDateTime, - userId: String, - isDraft: Boolean, - archiveRequired: Boolean) - -object ApiDocumentIssue { - implicit val format: Format[ApiDocumentIssue] = ( - (JsPath \ "id").format[Long] and - (JsPath \ "startPage").formatNullable[Double] and - (JsPath \ "endPage").formatNullable[Double] and - (JsPath \ "text").format[String] and - (JsPath \ "lastUpdate").format[ZonedDateTime] and - (JsPath \ "userId").format[String] and - (JsPath \ "isDraft").format[Boolean] and - (JsPath \ "archiveRequired").format[Boolean] - )(ApiDocumentIssue.apply, unlift(ApiDocumentIssue.unapply)) - - def fromDomain(x: DocumentIssue) = ApiDocumentIssue( - id = x.id.id, - startPage = x.startPage, - endPage = x.endPage, - text = x.text, - lastUpdate = ZonedDateTime.of(x.lastUpdate, ZoneId.of("Z")), - userId = x.userId.id, - isDraft = x.isDraft, - archiveRequired = x.archiveRequired - ) -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/documentissue/ApiPartialDocumentIssue.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/documentissue/ApiPartialDocumentIssue.scala deleted file mode 100644 index c29b703..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/documentissue/ApiPartialDocumentIssue.scala +++ /dev/null @@ -1,42 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.documentissue - -import java.time.LocalDateTime - -import play.api.libs.functional.syntax._ -import play.api.libs.json._ -import xyz.driver.pdsuicommon.domain.{LongId, StringId, User} -import xyz.driver.pdsuidomain.entities.{Document, DocumentIssue} - -final case class ApiPartialDocumentIssue(startPage: Option[Double], - endPage: Option[Double], - text: String, - archiveRequired: Boolean) { - def applyTo(x: DocumentIssue): DocumentIssue = x.copy( - startPage = startPage, - endPage = endPage, - text = text, - archiveRequired = archiveRequired - ) - - def toDomain(userId: StringId[User], documentId: LongId[Document]) = - DocumentIssue( - id = LongId(0), - userId = userId, - documentId = documentId, - startPage = startPage, - endPage = endPage, - lastUpdate = LocalDateTime.MIN, - isDraft = true, - text = text, - archiveRequired = false - ) -} - -object ApiPartialDocumentIssue { - implicit val format: Format[ApiPartialDocumentIssue] = ( - (JsPath \ "startPage").formatNullable[Double] and - (JsPath \ "endPage").formatNullable[Double] and - (JsPath \ "text").format[String] and - (JsPath \ "archiveRequired").format[Boolean] - )(ApiPartialDocumentIssue.apply, unlift(ApiPartialDocumentIssue.unapply)) -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/eligibility.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/eligibility.scala index 3c2465f..571cbde 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/eligibility.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/eligibility.scala @@ -1,5 +1,6 @@ -package xyz.driver.pdsuidomain.formats.json.sprayformats +package xyz.driver.pdsuidomain.formats.json +import spray.json.DefaultJsonProtocol._ import spray.json._ import DefaultJsonProtocol._ import xyz.driver.core.Id @@ -8,13 +9,14 @@ import xyz.driver.entities.labels.LabelValue import xyz.driver.pdsuidomain.entities.eligibility._ object eligibility { + import export._ import xyz.driver.formats.json.assay._ import xyz.driver.formats.json.common._ import xyz.driver.formats.json.labels._ import xyz.driver.formats.json.process._ - import xyz.driver.pdsuidomain.formats.json.sprayformats.document._ - import xyz.driver.pdsuidomain.formats.json.sprayformats.record._ - import xyz.driver.pdsuidomain.formats.json.sprayformats.export._ + import xyz.driver.pdsuidomain.formats.json.document._ + import xyz.driver.pdsuidomain.formats.json.record._ + import xyz.driver.pdsuidomain.formats.json.export._ implicit val molecularDocumentFormat: RootJsonFormat[MolecularEvidenceDocument] = jsonFormat7( MolecularEvidenceDocument) diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/eligibilityarm.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/eligibilityarm.scala index 039e088..f31e6bd 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/eligibilityarm.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/eligibilityarm.scala @@ -1,4 +1,4 @@ -package xyz.driver.pdsuidomain.formats.json.sprayformats +package xyz.driver.pdsuidomain.formats.json import spray.json._ import xyz.driver.entities.patient.CancerType diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/eligibilityarm/ApiCreateEligibilityArm.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/eligibilityarm/ApiCreateEligibilityArm.scala deleted file mode 100644 index 087fed5..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/eligibilityarm/ApiCreateEligibilityArm.scala +++ /dev/null @@ -1,33 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.eligibilityarm - -import play.api.libs.json.{Format, Json} -import xyz.driver.entities.patient.CancerType -import xyz.driver.pdsuicommon.domain.{LongId, StringId} -import xyz.driver.pdsuidomain.entities.{EligibilityArm, EligibilityArmDisease, EligibilityArmWithDiseases} - -final case class ApiCreateEligibilityArm(name: String, trialId: String, diseases: Seq[String]) { - - def toDomain: EligibilityArmWithDiseases = { - val eligibilityArm = EligibilityArm( - id = LongId(0), - name = name, - trialId = StringId(trialId), - originalName = name - ) - - EligibilityArmWithDiseases( - eligibilityArm, - diseases.map { disease => - val condition = CancerType - .fromString(disease) - .getOrElse(throw new NoSuchElementException(s"unknown condition $disease")) - EligibilityArmDisease(eligibilityArm.id, condition) - } - ) - } -} - -object ApiCreateEligibilityArm { - - implicit val format: Format[ApiCreateEligibilityArm] = Json.format[ApiCreateEligibilityArm] -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/eligibilityarm/ApiEligibilityArm.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/eligibilityarm/ApiEligibilityArm.scala deleted file mode 100644 index 71423e8..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/eligibilityarm/ApiEligibilityArm.scala +++ /dev/null @@ -1,57 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.eligibilityarm - -import play.api.libs.functional.syntax._ -import play.api.libs.json._ -import xyz.driver.entities.patient.CancerType -import xyz.driver.pdsuicommon.domain.{LongId, StringId} -import xyz.driver.pdsuidomain.entities.{EligibilityArm, EligibilityArmDisease, EligibilityArmWithDiseases} - -final case class ApiEligibilityArm(id: Long, - name: String, - originalName: String, - trialId: String, - diseases: Seq[String]) { - - def toDomain: EligibilityArmWithDiseases = { - val eligibilityArm = EligibilityArm( - id = LongId(this.id), - name = this.name, - originalName = this.originalName, - trialId = StringId(this.trialId), - deleted = None // if we have an ApiEligibilityArm object, the EligibilityArm itself has not been deleted - ) - - EligibilityArmWithDiseases( - eligibilityArm, - this.diseases.map { disease => - val condition = CancerType - .fromString(disease) - .getOrElse(throw new NoSuchElementException(s"unknown condition $disease")) - EligibilityArmDisease(eligibilityArm.id, condition) - } - ) - } -} - -object ApiEligibilityArm { - - implicit val format: Format[ApiEligibilityArm] = ( - (JsPath \ "id").format[Long] and - (JsPath \ "name").format[String] and - (JsPath \ "originalName").format[String] and - (JsPath \ "trialId").format[String] and - (JsPath \ "diseases").format[Seq[String]] - )(ApiEligibilityArm.apply, unlift(ApiEligibilityArm.unapply)) - - def fromDomain(eligibilityArmWithDiseases: EligibilityArmWithDiseases): ApiEligibilityArm = { - import eligibilityArmWithDiseases.{eligibilityArm, eligibilityArmDiseases} - - ApiEligibilityArm( - id = eligibilityArm.id.id, - name = eligibilityArm.name, - originalName = eligibilityArm.originalName, - trialId = eligibilityArm.trialId.id, - diseases = eligibilityArmDiseases.map(_.disease.toString) - ) - } -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/eligibilityarm/ApiPartialEligibilityArm.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/eligibilityarm/ApiPartialEligibilityArm.scala deleted file mode 100644 index aca22ef..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/eligibilityarm/ApiPartialEligibilityArm.scala +++ /dev/null @@ -1,23 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.eligibilityarm - -import play.api.libs.json.{Format, Json} -import xyz.driver.entities.patient.CancerType -import xyz.driver.pdsuidomain.entities.{EligibilityArmDisease, EligibilityArmWithDiseases} - -final case class ApiPartialEligibilityArm(name: String, diseases: Seq[String]) { - - def applyTo(armWithDisease: EligibilityArmWithDiseases): EligibilityArmWithDiseases = { - val arm = armWithDisease.eligibilityArm.copy(name = name) - val armDiseases = diseases.map { disease => - EligibilityArmDisease( - armWithDisease.eligibilityArm.id, - CancerType.fromString(disease).getOrElse(throw new NoSuchElementException(s"unknown condition $disease"))) - } - EligibilityArmWithDiseases(arm, armDiseases) - } -} - -object ApiPartialEligibilityArm { - - implicit val format: Format[ApiPartialEligibilityArm] = Json.format -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/evidence/ApiPatientLabelEvidence.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/evidence/ApiPatientLabelEvidence.scala deleted file mode 100644 index c7a6de9..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/evidence/ApiPatientLabelEvidence.scala +++ /dev/null @@ -1,33 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.evidence - -import java.time.LocalDate - -import play.api.libs.json._ -import xyz.driver.pdsuidomain.entities.PatientLabelEvidenceView - -final case class ApiPatientLabelEvidence(id: Long, - value: String, - evidenceText: String, - documentId: Option[Long], - evidenceId: Option[Long], - reportId: Option[String], - documentType: String, - date: LocalDate, - providerType: String) - -object ApiPatientLabelEvidence { - - implicit val format: Format[ApiPatientLabelEvidence] = Json.format - - def fromDomain(x: PatientLabelEvidenceView) = ApiPatientLabelEvidence( - id = x.id.id, - value = x.value.toString, - evidenceText = x.evidenceText, - documentId = x.documentId.map(_.id), - evidenceId = x.evidenceId.map(_.id), - reportId = x.reportId.map(_.toString), - documentType = x.documentType.name, - date = x.date.get, - providerType = x.providerType.name - ) -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/export.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/export.scala index 4391453..6b72cb8 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/export.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/export.scala @@ -1,4 +1,4 @@ -package xyz.driver.pdsuidomain.formats.json.sprayformats +package xyz.driver.pdsuidomain.formats.json import spray.json._ import xyz.driver.entities.labels.Label diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/extracteddata.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/extracteddata.scala index 436fbe9..c9ac55b 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/extracteddata.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/extracteddata.scala @@ -1,16 +1,16 @@ -package xyz.driver.pdsuidomain.formats.json.sprayformats +package xyz.driver.pdsuidomain.formats.json import spray.json._ import xyz.driver.entities.labels.{Label, LabelCategory, LabelValue} +import xyz.driver.formats.json.labels._ import xyz.driver.pdsuicommon.domain.{LongId, TextJson} import xyz.driver.pdsuidomain.entities._ import xyz.driver.pdsuidomain.services.ExtractedDataService.RichExtractedData -import xyz.driver.formats.json.labels._ object extracteddata { import DefaultJsonProtocol._ - import common._ import ExtractedData._ + import common._ implicit val metaKeywordFormat: RootJsonFormat[Meta.Keyword] = jsonFormat4(Meta.Keyword) implicit val metaTextLayerPositionFormat: RootJsonFormat[Meta.TextLayerPosition] = jsonFormat3( diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/extracteddata/ApiExtractedData.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/extracteddata/ApiExtractedData.scala deleted file mode 100644 index 4182c8d..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/extracteddata/ApiExtractedData.scala +++ /dev/null @@ -1,64 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.extracteddata - -import xyz.driver.pdsuicommon.domain.{LongId, TextJson} -import xyz.driver.pdsuidomain.entities.ExtractedData -import xyz.driver.pdsuidomain.formats.json.label.ApiExtractedDataLabel -import play.api.libs.json._ -import play.api.data.validation._ -import play.api.libs.functional.syntax._ -import xyz.driver.pdsuicommon.json.JsonSerializer -import xyz.driver.pdsuidomain.services.ExtractedDataService.RichExtractedData - -// The specification: https://driverinc.atlassian.net/wiki/pages/viewpage.action?pageId=33423387 -// Note, that there is "Extracted data object or Temporary extracted data object" in specification -// ApiExtractedData represents both types -final case class ApiExtractedData(id: Long, - documentId: Long, - keywordId: Option[Long], - evidence: Option[String], - meta: Option[String], - // An empty list and no-existent list are different cases - labels: Option[List[ApiExtractedDataLabel]]) { - - def toDomain = RichExtractedData( - extractedData = ExtractedData( - id = LongId(this.id), - documentId = LongId(this.documentId), - keywordId = this.keywordId.map(LongId(_)), - evidenceText = this.evidence, - meta = this.meta.map(x => TextJson(JsonSerializer.deserialize[ExtractedData.Meta](x))) - ), - labels = labels.getOrElse(List.empty).map(_.toDomain()) - ) - -} - -object ApiExtractedData { - - implicit val format: Format[ApiExtractedData] = ( - (JsPath \ "id").format[Long] and - (JsPath \ "documentId").format[Long] and - (JsPath \ "keywordId").formatNullable[Long] and - (JsPath \ "evidence").formatNullable[String] and - (JsPath \ "meta").formatNullable[String] and - (JsPath \ "labels").formatNullable[List[ApiExtractedDataLabel]]( - Format( - Reads - .of[List[ApiExtractedDataLabel]] - .filter(ValidationError("empty labels"))({ - case x if x.nonEmpty => true - case _ => false - }), - Writes.of[List[ApiExtractedDataLabel]] - )) - )(ApiExtractedData.apply, unlift(ApiExtractedData.unapply)) - - def fromDomain(extractedDataWithLabels: RichExtractedData) = ApiExtractedData( - id = extractedDataWithLabels.extractedData.id.id, - documentId = extractedDataWithLabels.extractedData.documentId.id, - keywordId = extractedDataWithLabels.extractedData.keywordId.map(_.id), - evidence = extractedDataWithLabels.extractedData.evidenceText, - meta = extractedDataWithLabels.extractedData.meta.map(x => JsonSerializer.serialize(x.content)), - labels = Option(extractedDataWithLabels.labels.map(ApiExtractedDataLabel.fromDomain)) - ) -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/extracteddata/ApiPartialExtractedData.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/extracteddata/ApiPartialExtractedData.scala deleted file mode 100644 index cfd55fd..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/extracteddata/ApiPartialExtractedData.scala +++ /dev/null @@ -1,80 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.extracteddata - -import xyz.driver.pdsuicommon.domain.{LongId, TextJson} -import xyz.driver.pdsuidomain.entities.ExtractedData.Meta -import xyz.driver.pdsuidomain.entities._ -import org.davidbild.tristate.Tristate -import org.davidbild.tristate.contrib.play.ToJsPathOpsFromJsPath -import play.api.data.validation._ -import play.api.libs.functional.syntax._ -import play.api.libs.json._ -import xyz.driver.pdsuicommon.json.{JsonSerializer, JsonValidationException} -import xyz.driver.pdsuicommon.validation.{AdditionalConstraints, JsonValidationErrors} -import xyz.driver.pdsuidomain.formats.json.label.ApiExtractedDataLabel -import xyz.driver.pdsuidomain.services.ExtractedDataService.RichExtractedData - -import scala.collection._ - -final case class ApiPartialExtractedData(documentId: Option[Long], - keywordId: Option[Long], - evidence: Tristate[String], - meta: Tristate[String], - labels: Tristate[List[ApiExtractedDataLabel]]) { - - def applyTo(orig: RichExtractedData): RichExtractedData = RichExtractedData( - extractedData = applyTo(orig.extractedData), - labels = labels.cata(_.map(_.toDomain(orig.extractedData.id)), List.empty, orig.labels) - ) - - private def applyTo(orig: ExtractedData): ExtractedData = ExtractedData( - id = orig.id, - documentId = orig.documentId, - keywordId = keywordId.map(LongId[Keyword]).orElse(orig.keywordId), - evidenceText = evidence.cata(Some(_), None, orig.evidenceText), - meta = meta.map(x => TextJson(JsonSerializer.deserialize[Meta](x))).cata(Some(_), None, orig.meta) - ) - - def toDomain: RichExtractedData = { - val validation = Map( - JsPath \ "documentId" -> AdditionalConstraints.optionNonEmptyConstraint(documentId) - ) - - val validationErrors: JsonValidationErrors = validation.collect({ - case (fieldName, e: Invalid) => (fieldName, e.errors) - })(breakOut) - - if (validationErrors.isEmpty) { - val extractedData = ExtractedData( - documentId = documentId.map(LongId[Document]).get, - keywordId = keywordId.map(LongId[Keyword]), - evidenceText = evidence.toOption, - meta = meta.map(x => TextJson(JsonSerializer.deserialize[Meta](x))).toOption - ) - val labelList = labels.map(_.map(_.toDomain())) - RichExtractedData(extractedData, labelList.getOrElse(List.empty)) - } else { - throw new JsonValidationException(validationErrors) - } - } -} - -object ApiPartialExtractedData { - - private val reads: Reads[ApiPartialExtractedData] = ( - (JsPath \ "documentId").readNullable[Long] and - (JsPath \ "keywordId").readNullable[Long] and - (JsPath \ "evidence").readTristate[String] and - (JsPath \ "meta").readTristate[String] and - (JsPath \ "labels").readTristate[List[ApiExtractedDataLabel]] - )(ApiPartialExtractedData.apply _) - - private val writes: Writes[ApiPartialExtractedData] = ( - (JsPath \ "documentId").writeNullable[Long] and - (JsPath \ "keywordId").writeNullable[Long] and - (JsPath \ "evidence").writeTristate[String] and - (JsPath \ "meta").writeTristate[String] and - (JsPath \ "labels").writeTristate[List[ApiExtractedDataLabel]] - )(unlift(ApiPartialExtractedData.unapply)) - - implicit val format: Format[ApiPartialExtractedData] = Format(reads, writes) -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/hypothesis.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/hypothesis.scala index c05ff23..c5f6141 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/hypothesis.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/hypothesis.scala @@ -1,4 +1,4 @@ -package xyz.driver.pdsuidomain.formats.json.sprayformats +package xyz.driver.pdsuidomain.formats.json import spray.json._ import xyz.driver.pdsuidomain.entities._ diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/hypothesis/ApiHypothesis.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/hypothesis/ApiHypothesis.scala deleted file mode 100644 index bf18a60..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/hypothesis/ApiHypothesis.scala +++ /dev/null @@ -1,35 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.hypothesis - -import java.util.UUID - -import play.api.libs.functional.syntax._ -import play.api.libs.json.{Format, JsPath} -import xyz.driver.pdsuicommon.domain.UuidId -import xyz.driver.pdsuidomain.entities.Hypothesis - -final case class ApiHypothesis(id: UUID, name: String, treatmentType: String, description: String) { - - def toDomain = Hypothesis( - id = UuidId[Hypothesis](id), - name = name, - treatmentType = treatmentType, - description = description - ) -} - -object ApiHypothesis { - - implicit val format: Format[ApiHypothesis] = ( - (JsPath \ "id").format[UUID] and - (JsPath \ "name").format[String] and - (JsPath \ "treatmentType").format[String] and - (JsPath \ "description").format[String] - )(ApiHypothesis.apply, unlift(ApiHypothesis.unapply)) - - def fromDomain(hypothesis: Hypothesis) = ApiHypothesis( - id = hypothesis.id.id, - name = hypothesis.name, - treatmentType = hypothesis.treatmentType, - description = hypothesis.description - ) -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/intervention.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/intervention.scala index e557e47..5cd7527 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/intervention.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/intervention.scala @@ -1,4 +1,4 @@ -package xyz.driver.pdsuidomain.formats.json.sprayformats +package xyz.driver.pdsuidomain.formats.json import spray.json._ import xyz.driver.pdsuicommon.domain.{LongId, StringId} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/intervention/ApiIntervention.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/intervention/ApiIntervention.scala deleted file mode 100644 index 072ed25..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/intervention/ApiIntervention.scala +++ /dev/null @@ -1,76 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.intervention - -import xyz.driver.pdsuicommon.domain.{LongId, StringId} -import xyz.driver.pdsuidomain.entities.{Intervention, InterventionArm, InterventionWithArms} -import play.api.libs.functional.syntax._ -import play.api.libs.json.{Format, JsPath} - -final case class ApiIntervention(id: Long, - name: String, - typeId: Option[Long], - dosage: String, - isActive: Boolean, - arms: List[Long], - trialId: String, - deliveryMethod: Option[String], - originalName: String, - originalDosage: String, - originalType: Option[String]) { - - def toDomain = { - val intervention = Intervention( - id = LongId(this.id), - trialId = StringId(this.trialId), - name = this.name, - originalName = this.originalName, - typeId = this.typeId.map(id => LongId(id)), - originalType = this.originalType.map(id => id.toString), - dosage = this.dosage, - originalDosage = this.originalDosage, - isActive = this.isActive, - deliveryMethod = this.deliveryMethod - ) - - InterventionWithArms(intervention, this.arms.map { armId => - InterventionArm(LongId(armId), intervention.id) - }) - - } - -} - -object ApiIntervention { - - implicit val format: Format[ApiIntervention] = ( - (JsPath \ "id").format[Long] and - (JsPath \ "name").format[String] and - (JsPath \ "typeId").formatNullable[Long] and - (JsPath \ "dosage").format[String] and - (JsPath \ "isActive").format[Boolean] and - (JsPath \ "arms").format[List[Long]] and - (JsPath \ "trialId").format[String] and - (JsPath \ "deliveryMethod").formatNullable[String] and - (JsPath \ "originalName").format[String] and - (JsPath \ "originalDosage").format[String] and - (JsPath \ "originalType").formatNullable[String] - )(ApiIntervention.apply, unlift(ApiIntervention.unapply)) - - def fromDomain(interventionWithArms: InterventionWithArms): ApiIntervention = { - import interventionWithArms.intervention - import interventionWithArms.arms - - ApiIntervention( - id = intervention.id.id, - name = intervention.name, - typeId = intervention.typeId.map(_.id), - dosage = intervention.dosage, - isActive = intervention.isActive, - arms = arms.map(_.armId.id), - trialId = intervention.trialId.id, - deliveryMethod = intervention.deliveryMethod, - originalName = intervention.originalName, - originalDosage = intervention.originalDosage, - originalType = intervention.originalType - ) - } -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/intervention/ApiInterventionType.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/intervention/ApiInterventionType.scala deleted file mode 100644 index 3db8bfa..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/intervention/ApiInterventionType.scala +++ /dev/null @@ -1,26 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.intervention - -import play.api.libs.functional.syntax._ -import play.api.libs.json.{Format, JsPath} -import xyz.driver.pdsuidomain.entities.InterventionType -import xyz.driver.pdsuidomain.entities.InterventionType.DeliveryMethod - -final case class ApiInterventionType(id: Long, name: String, deliveryMethods: List[String]) { - - def toDomain = InterventionType.typeFromString(name) -} - -object ApiInterventionType { - - implicit val format: Format[ApiInterventionType] = ( - (JsPath \ "id").format[Long] and - (JsPath \ "name").format[String] and - (JsPath \ "deliveryMethods").format[List[String]] - )(ApiInterventionType.apply, unlift(ApiInterventionType.unapply)) - - def fromDomain(interventionType: InterventionType) = ApiInterventionType( - id = interventionType.id.id, - name = interventionType.name, - deliveryMethods = interventionType.deliveryMethods.map(DeliveryMethod.methodToString).toList - ) -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/intervention/ApiPartialIntervention.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/intervention/ApiPartialIntervention.scala deleted file mode 100644 index 28a8555..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/intervention/ApiPartialIntervention.scala +++ /dev/null @@ -1,90 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.intervention - -import play.api.data.validation.Invalid -import xyz.driver.pdsuicommon.domain.{LongId, StringId} -import xyz.driver.pdsuidomain.entities.{Intervention, InterventionArm, InterventionWithArms, Trial} -import play.api.libs.functional.syntax._ -import play.api.libs.json._ -import xyz.driver.pdsuicommon.json.JsonValidationException -import xyz.driver.pdsuicommon.validation.{AdditionalConstraints, JsonValidationErrors} - -import scala.collection.breakOut -import scala.util.Try - -final case class ApiPartialIntervention(name: Option[String], - trialId: Option[String], - typeId: Option[Long], - dosage: Option[String], - isActive: Option[Boolean], - deliveryMethod: Option[String], - arms: Option[List[Long]]) { - - def applyTo(orig: InterventionWithArms): InterventionWithArms = { - val origIntervention = orig.intervention - val draftArmList = arms.map(_.map(x => InterventionArm(armId = LongId(x), interventionId = orig.intervention.id))) - orig.copy( - intervention = origIntervention.copy( - name = name.getOrElse(origIntervention.name), - typeId = typeId.map(LongId(_)).orElse(origIntervention.typeId), - dosage = dosage.getOrElse(origIntervention.dosage), - isActive = isActive.getOrElse(origIntervention.isActive), - deliveryMethod = deliveryMethod.orElse(origIntervention.deliveryMethod) - ), - arms = draftArmList.getOrElse(orig.arms) - ) - } - - def toDomain: Try[InterventionWithArms] = Try { - val validation = Map(JsPath \ "trialId" -> AdditionalConstraints.optionNonEmptyConstraint(trialId)) - - val validationErrors: JsonValidationErrors = validation.collect({ - case (fieldName, e: Invalid) => (fieldName, e.errors) - })(breakOut) - - if (validationErrors.isEmpty) { - InterventionWithArms( - intervention = Intervention( - id = LongId(0), - trialId = trialId.map(StringId[Trial]).get, - name = name.getOrElse(""), - originalName = name.getOrElse(""), - typeId = typeId.map(LongId(_)), - originalType = Option(""), - dosage = dosage.getOrElse(""), - originalDosage = dosage.getOrElse(""), - isActive = isActive.getOrElse(false), - deliveryMethod = deliveryMethod - ), - arms = - arms.map(_.map(x => InterventionArm(armId = LongId(x), interventionId = LongId(0)))).getOrElse(List.empty) - ) - } else { - throw new JsonValidationException(validationErrors) - } - } -} - -object ApiPartialIntervention { - - private val reads: Reads[ApiPartialIntervention] = ( - (JsPath \ "name").readNullable[String] and - (JsPath \ "trialId").readNullable[String] and - (JsPath \ "typeId").readNullable[Long] and - (JsPath \ "dosage").readNullable[String] and - (JsPath \ "isActive").readNullable[Boolean] and - (JsPath \ "deliveryMethod").readNullable[String] and - (JsPath \ "arms").readNullable[List[Long]] - )(ApiPartialIntervention.apply _) - - private val writes: Writes[ApiPartialIntervention] = ( - (JsPath \ "name").writeNullable[String] and - (JsPath \ "trialId").writeNullable[String] and - (JsPath \ "typeId").writeNullable[Long] and - (JsPath \ "dosage").writeNullable[String] and - (JsPath \ "isActive").writeNullable[Boolean] and - (JsPath \ "deliveryMethod").writeNullable[String] and - (JsPath \ "arms").writeNullable[List[Long]] - )(unlift(ApiPartialIntervention.unapply)) - - implicit val format: Format[ApiPartialIntervention] = Format(reads, writes) -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/label/ApiCriterionLabel.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/label/ApiCriterionLabel.scala deleted file mode 100644 index edb0603..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/label/ApiCriterionLabel.scala +++ /dev/null @@ -1,54 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.label - -import xyz.driver.pdsuicommon.domain.LongId -import xyz.driver.pdsuidomain.entities.{Criterion, CriterionLabel} -import play.api.data.validation.ValidationError -import play.api.libs.functional.syntax._ -import play.api.libs.json._ -import xyz.driver.entities.labels.{Label, LabelCategory, LabelValue} - -/** - * @param value Yes|No - */ -final case class ApiCriterionLabel(labelId: Option[Long], - categoryId: Option[Long], - value: Option[String], - isDefining: Boolean) { - - def toDomain(criterionId: LongId[Criterion]) = CriterionLabel( - id = LongId(0L), - labelId = labelId.map(LongId[Label]), - criterionId = criterionId, - categoryId = categoryId.map(LongId[LabelCategory]), - value = value.map { - case "Yes" => true - case "No" => false - }, - isDefining = isDefining - ) -} - -object ApiCriterionLabel { - - def fromDomain(x: CriterionLabel) = ApiCriterionLabel( - labelId = x.labelId.map(_.id), - categoryId = x.categoryId.map(_.id), - value = x.value.map { x => - LabelValue.fromBoolean(x).toString - }, - isDefining = x.isDefining - ) - - implicit val format: Format[ApiCriterionLabel] = ( - (JsPath \ "labelId").formatNullable[Long] and - (JsPath \ "categoryId").formatNullable[Long] and - (JsPath \ "value").formatNullable[String]( - Format(Reads - .of[String] - .filter(ValidationError("unknown value"))({ x => - x == "Yes" || x == "No" - }), - Writes.of[String])) and - (JsPath \ "isDefining").format[Boolean] - )(ApiCriterionLabel.apply, unlift(ApiCriterionLabel.unapply)) -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/label/ApiExtractedDataLabel.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/label/ApiExtractedDataLabel.scala deleted file mode 100644 index 1497679..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/label/ApiExtractedDataLabel.scala +++ /dev/null @@ -1,41 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.label - -import xyz.driver.pdsuicommon.domain.LongId -import xyz.driver.pdsuidomain.entities.{ExtractedData, ExtractedDataLabel} -import play.api.data.validation.ValidationError -import play.api.libs.functional.syntax._ -import play.api.libs.json._ -import xyz.driver.entities.labels.{Label, LabelCategory, LabelValue} - -final case class ApiExtractedDataLabel(id: Option[Long], categoryId: Option[Long], value: Option[String]) { - - def toDomain(dataId: LongId[ExtractedData] = LongId(0)) = ExtractedDataLabel( - id = LongId(0), - dataId = dataId, - labelId = id.map(LongId[Label]), - categoryId = categoryId.map(LongId[LabelCategory]), - value = value.flatMap(LabelValue.fromString) - ) -} - -object ApiExtractedDataLabel { - - implicit val format: Format[ApiExtractedDataLabel] = ( - (JsPath \ "id").formatNullable[Long] and - (JsPath \ "categoryId").formatNullable[Long] and - (JsPath \ "value").formatNullable[String]( - Format(Reads - .of[String] - .filter(ValidationError("unknown value"))({ - case x if LabelValue.fromString(x).isDefined => true - case _ => false - }), - Writes.of[String])) - )(ApiExtractedDataLabel.apply, unlift(ApiExtractedDataLabel.unapply)) - - def fromDomain(dataLabel: ExtractedDataLabel) = ApiExtractedDataLabel( - id = dataLabel.labelId.map(_.id), - categoryId = dataLabel.categoryId.map(_.id), - value = dataLabel.value.map(_.toString) - ) -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/listresponse.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/listresponse.scala index 20644dc..1e359d6 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/listresponse.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/listresponse.scala @@ -1,9 +1,9 @@ -package xyz.driver.pdsuidomain.formats.json.sprayformats +package xyz.driver.pdsuidomain.formats.json -import spray.json._ import spray.json.DefaultJsonProtocol._ +import spray.json._ import xyz.driver.pdsuidomain.ListResponse -import xyz.driver.pdsuidomain.formats.json.sprayformats.common._ +import xyz.driver.pdsuidomain.formats.json.common._ object listresponse { private val itemsField = "items" diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/message/ApiMessage.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/message/ApiMessage.scala deleted file mode 100644 index 425eeac..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/message/ApiMessage.scala +++ /dev/null @@ -1,79 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.message - -import java.time.{ZoneId, ZonedDateTime} - -import play.api.libs.functional.syntax._ -import play.api.libs.json.{Format, JsPath} -import xyz.driver.pdsuicommon.domain.{LongId, StringId, UuidId} -import xyz.driver.pdsuidomain.entities.Message - -final case class ApiMessage(id: Long, - text: String, - lastUpdate: ZonedDateTime, - userId: String, - isDraft: Boolean, - recordId: Option[Long], - documentId: Option[Long], - patientId: Option[String], - trialId: Option[String], - startPage: Option[Double], - endPage: Option[Double], - evidence: Option[String], - archiveRequired: Option[Boolean], - meta: Option[String]) { - - def toDomain = Message( - id = LongId(this.id), - text = this.text, - lastUpdate = this.lastUpdate.toLocalDateTime(), - userId = StringId(this.userId), - isDraft = this.isDraft, - recordId = this.recordId.map(id => LongId(id)), - documentId = this.documentId.map(id => LongId(id)), - patientId = this.patientId.map(id => UuidId(id)), - trialId = this.trialId.map(id => StringId(id)), - startPage = this.startPage, - endPage = this.endPage, - evidence = this.evidence, - archiveRequired = this.archiveRequired, - meta = this.meta - ) - -} - -object ApiMessage { - - def fromDomain(domain: Message) = ApiMessage( - id = domain.id.id, - text = domain.text, - lastUpdate = ZonedDateTime.of(domain.lastUpdate, ZoneId.of("Z")), - userId = domain.userId.id, - isDraft = domain.isDraft, - recordId = domain.recordId.map(_.id), - documentId = domain.documentId.map(_.id), - patientId = domain.patientId.map(_.toString), - trialId = domain.trialId.map(_.toString), - startPage = domain.startPage, - endPage = domain.endPage, - evidence = domain.evidence, - archiveRequired = domain.archiveRequired, - meta = domain.meta - ) - - implicit val format: Format[ApiMessage] = ( - (JsPath \ "id").format[Long] and - (JsPath \ "text").format[String] and - (JsPath \ "lastUpdate").format[ZonedDateTime] and - (JsPath \ "userId").format[String] and - (JsPath \ "isDraft").format[Boolean] and - (JsPath \ "recordId").formatNullable[Long] and - (JsPath \ "documentId").formatNullable[Long] and - (JsPath \ "patientId").formatNullable[String] and - (JsPath \ "trialId").formatNullable[String] and - (JsPath \ "startPage").formatNullable[Double] and - (JsPath \ "endPage").formatNullable[Double] and - (JsPath \ "evidence").formatNullable[String] and - (JsPath \ "archiveRequired").formatNullable[Boolean] and - (JsPath \ "meta").formatNullable[String] - )(ApiMessage.apply, unlift(ApiMessage.unapply)) -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/message/ApiPartialMessage.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/message/ApiPartialMessage.scala deleted file mode 100644 index a2656f2..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/message/ApiPartialMessage.scala +++ /dev/null @@ -1,82 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.message - -import java.time.LocalDateTime - -import xyz.driver.pdsuicommon.domain._ -import play.api.libs.functional.syntax._ -import play.api.libs.json.{Format, JsPath} -import xyz.driver.pdsuidomain.entities.Message - -final case class ApiPartialMessage(text: Option[String], - recordId: Option[Long], - documentId: Option[Long], - patientId: Option[String], - trialId: Option[String], - startPage: Option[Double], - endPage: Option[Double], - evidence: Option[String], - archiveRequired: Option[Boolean], - meta: Option[String]) { - - def toDomain(userId: StringId[User]) = Message( - id = LongId(0), - text = text.getOrElse(""), - userId = userId, - isDraft = true, - recordId = recordId.map(LongId(_)), - documentId = documentId.map(LongId(_)), - patientId = patientId.map(UuidId(_)), - trialId = trialId.map(StringId(_)), - startPage = startPage, - endPage = endPage, - evidence = evidence, - archiveRequired = archiveRequired, - meta = meta, - lastUpdate = LocalDateTime.MIN - ) - - def applyTo(orig: Message): Message = { - orig.copy( - text = text.getOrElse(""), - recordId = recordId.map(LongId(_)), - documentId = documentId.map(LongId(_)), - patientId = patientId.map(UuidId(_)), - trialId = trialId.map(StringId(_)), - startPage = startPage, - endPage = endPage, - evidence = evidence, - archiveRequired = archiveRequired, - meta = meta, - lastUpdate = LocalDateTime.MIN - ) - } -} - -object ApiPartialMessage { - - implicit val format: Format[ApiPartialMessage] = ( - (JsPath \ "text").formatNullable[String] and - (JsPath \ "recordId").formatNullable[Long] and - (JsPath \ "documentId").formatNullable[Long] and - (JsPath \ "patientId").formatNullable[String] and - (JsPath \ "trialId").formatNullable[String] and - (JsPath \ "startPage").formatNullable[Double] and - (JsPath \ "endPage").formatNullable[Double] and - (JsPath \ "evidence").formatNullable[String] and - (JsPath \ "archiveRequired").formatNullable[Boolean] and - (JsPath \ "meta").formatNullable[String] - )(ApiPartialMessage.apply, unlift(ApiPartialMessage.unapply)) - - def fromDomain(domain: Message) = ApiPartialMessage( - text = Some(domain.text), - recordId = domain.recordId.map(_.id), - documentId = domain.documentId.map(_.id), - patientId = domain.patientId.map(_.toString), - trialId = domain.trialId.map(_.toString), - startPage = domain.startPage, - endPage = domain.endPage, - evidence = domain.evidence, - archiveRequired = domain.archiveRequired, - meta = domain.meta - ) -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/password/PasswordCreateRequest.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/password/PasswordCreateRequest.scala deleted file mode 100644 index 5c12415..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/password/PasswordCreateRequest.scala +++ /dev/null @@ -1,9 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.password - -import play.api.libs.json.{Format, Json} - -final case class PasswordCreateRequest(password: String, key: String) - -object PasswordCreateRequest { - implicit val format: Format[PasswordCreateRequest] = Json.format[PasswordCreateRequest] -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/password/PasswordUpdateRequest.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/password/PasswordUpdateRequest.scala deleted file mode 100644 index 07851ea..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/password/PasswordUpdateRequest.scala +++ /dev/null @@ -1,9 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.password - -import play.api.libs.json.{Format, Json} - -final case class PasswordUpdateRequest(password: String, oldPassword: String) - -object PasswordUpdateRequest { - implicit val format: Format[PasswordUpdateRequest] = Json.format[PasswordUpdateRequest] -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patient.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient.scala index 2b0dfe5..75eb016 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patient.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient.scala @@ -1,15 +1,15 @@ -package xyz.driver.pdsuidomain.formats.json.sprayformats +package xyz.driver.pdsuidomain.formats.json import spray.json._ import xyz.driver.core.json.EnumJsonFormat -import xyz.driver.pdsuidomain.entities._ import xyz.driver.formats.json.common._ import xyz.driver.formats.json.patient._ +import xyz.driver.pdsuidomain.entities._ object patient { import DefaultJsonProtocol._ - import common._ import Patient._ + import common._ implicit val patientStatusFormat = new EnumJsonFormat[Status]( "New" -> Status.New, @@ -28,7 +28,7 @@ object patient { } } - implicit val patientWriter: RootJsonWriter[Patient] = new RootJsonWriter[Patient] { + implicit val patientFormat: RootJsonFormat[Patient] = new RootJsonFormat[Patient] { override def write(patient: Patient): JsValue = JsObject( "id" -> patient.id.toJson, @@ -43,6 +43,8 @@ object patient { "disease" -> patient.disease.toJson, "orderId" -> patient.orderId.toJson ) + + override def read(json: JsValue): Patient = jsonReader[Patient].read(json) } } diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/ApiPatient.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/ApiPatient.scala deleted file mode 100644 index 585d4ed..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/ApiPatient.scala +++ /dev/null @@ -1,86 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.patient - -import java.time.{LocalDate, ZoneId, ZonedDateTime} -import java.util.UUID - -import xyz.driver.pdsuicommon.domain.{StringId, UuidId} -import xyz.driver.pdsuidomain.entities.{Patient, PatientOrderId} -import play.api.libs.functional.syntax._ -import play.api.libs.json.{Format, JsPath} -import xyz.driver.entities.common.FullName -import xyz.driver.entities.patient - -final case class ApiPatient(id: String, - status: String, - name: String, - dob: LocalDate, - assignee: Option[String], - previousStatus: Option[String], - previousAssignee: Option[String], - lastActiveUser: Option[String], - lastUpdate: ZonedDateTime, - disease: String, - orderId: UUID) { - - private def extractStatus(status: String): Patient.Status = - PatientStatus.statusFromString - .applyOrElse(status, (s: String) => throw new NoSuchElementException(s"Unknown status $s")) - - private def parseName(name: String): FullName[Patient] = - name.split(" ") match { - case Array() => throw new NoSuchElementException(s"Patient's name cannot be empty") - case Array(first) => FullName.fromStrings[Patient](first, "", "") - case Array(first, last) => FullName.fromStrings[Patient](first, "", last) - case Array(first, middle, last) => FullName.fromStrings[Patient](first, middle, last) - case _ => throw new NoSuchElementException(s"Patient's name is ambiguous") - } - - def toDomain = Patient( - id = UuidId(this.id), - status = extractStatus(this.status), - name = parseName(this.name), - dob = this.dob, - assignee = this.assignee.map(StringId(_)), - previousStatus = this.previousStatus.map(extractStatus), - previousAssignee = this.previousAssignee.map(StringId(_)), - lastActiveUserId = this.lastActiveUser.map(StringId(_)), - isUpdateRequired = false, - disease = patient.CancerType - .fromString(this.disease) - .getOrElse(throw new IllegalArgumentException(s"Unknown cancer type ${this.disease}")), - orderId = PatientOrderId(this.orderId), - lastUpdate = this.lastUpdate.toLocalDateTime - ) - -} - -object ApiPatient { - - implicit val format: Format[ApiPatient] = ( - (JsPath \ "id").format[String] and - (JsPath \ "status").format[String] and - (JsPath \ "name").format[String] and - (JsPath \ "dob").format[LocalDate] and - (JsPath \ "assignee").formatNullable[String] and - (JsPath \ "previousStatus").formatNullable[String] and - (JsPath \ "previousAssignee").formatNullable[String] and - (JsPath \ "lastActiveUser").formatNullable[String] and - (JsPath \ "lastUpdate").format[ZonedDateTime] and - (JsPath \ "disease").format[String] and - (JsPath \ "orderId").format[UUID] - )(ApiPatient.apply, unlift(ApiPatient.unapply)) - - def fromDomain(patient: Patient) = ApiPatient( - id = patient.id.toString, - status = PatientStatus.statusToString(patient.status), - name = patient.name.toString(), - dob = patient.dob, - assignee = patient.assignee.map(_.id), - previousStatus = patient.previousStatus.map(PatientStatus.statusToString), - previousAssignee = patient.previousAssignee.map(_.id), - lastActiveUser = patient.lastActiveUserId.map(_.id), - lastUpdate = ZonedDateTime.of(patient.lastUpdate, ZoneId.of("Z")), - disease = patient.disease.toString, - orderId = patient.orderId.id - ) -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/PatientStatus.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/PatientStatus.scala deleted file mode 100644 index a23a1de..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/PatientStatus.scala +++ /dev/null @@ -1,24 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.patient - -import xyz.driver.pdsuidomain.entities.Patient.Status - -object PatientStatus { - - val statusFromString: PartialFunction[String, Status] = { - case "New" => Status.New - case "Verified" => Status.Verified - case "Reviewed" => Status.Reviewed - case "Curated" => Status.Curated - case "Flagged" => Status.Flagged - case "Done" => Status.Done - } - - def statusToString(x: Status): String = x match { - case Status.New => "New" - case Status.Verified => "Verified" - case Status.Reviewed => "Reviewed" - case Status.Curated => "Curated" - case Status.Flagged => "Flagged" - case Status.Done => "Done" - } -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/eligible/ApiPartialPatientEligibleTrial.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/eligible/ApiPartialPatientEligibleTrial.scala deleted file mode 100644 index 03ff275..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/eligible/ApiPartialPatientEligibleTrial.scala +++ /dev/null @@ -1,18 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.patient.eligible - -import xyz.driver.pdsuidomain.entities.PatientTrialArmGroupView -import play.api.libs.json.{Format, Json} - -final case class ApiPartialPatientEligibleTrial(isVerified: Option[Boolean]) { - - def applyTo(orig: PatientTrialArmGroupView): PatientTrialArmGroupView = { - orig.copy( - isVerified = isVerified.getOrElse(orig.isVerified) - ) - } -} - -object ApiPartialPatientEligibleTrial { - - implicit val format: Format[ApiPartialPatientEligibleTrial] = Json.format -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/eligible/ApiPatientEligibleTrial.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/eligible/ApiPatientEligibleTrial.scala deleted file mode 100644 index 55c8149..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/eligible/ApiPatientEligibleTrial.scala +++ /dev/null @@ -1,51 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.patient.eligible - -import java.util.UUID - -import play.api.data.validation.ValidationError -import play.api.libs.functional.syntax._ -import play.api.libs.json._ -import xyz.driver.entities.labels.LabelValue -import xyz.driver.pdsuidomain.services.PatientEligibleTrialService.RichPatientEligibleTrial - -final case class ApiPatientEligibleTrial(id: Long, - patientId: String, - trialId: String, - trialTitle: String, - arms: List[String], - hypothesisId: UUID, - verifiedEligibilityStatus: Option[String], - isVerified: Boolean) - -object ApiPatientEligibleTrial { - - implicit val apiEligibleTrialJsonFormat: Format[ApiPatientEligibleTrial] = ( - (JsPath \ "id").format[Long] and - (JsPath \ "patientId").format[String] and - (JsPath \ "trialId").format[String] and - (JsPath \ "trialTitle").format[String] and - (JsPath \ "arms").format[List[String]] and - (JsPath \ "hypothesisId").format[UUID] and - (JsPath \ "verifiedEligibilityStatus").formatNullable[String](Format( - Reads - .of[String] - .filter(ValidationError("unknown eligibility status"))({ - case x if LabelValue.fromString(x).isDefined => true - case _ => false - }), - Writes.of[String] - )) and - (JsPath \ "isVerified").format[Boolean] - )(ApiPatientEligibleTrial.apply, unlift(ApiPatientEligibleTrial.unapply)) - - def fromDomain(eligibleTrialWithTrial: RichPatientEligibleTrial) = ApiPatientEligibleTrial( - id = eligibleTrialWithTrial.group.id.id, - patientId = eligibleTrialWithTrial.group.patientId.toString, - trialId = eligibleTrialWithTrial.group.trialId.id, - trialTitle = eligibleTrialWithTrial.trial.title, - arms = eligibleTrialWithTrial.arms.map(_.armName), - hypothesisId = eligibleTrialWithTrial.group.hypothesisId.id, - eligibleTrialWithTrial.group.verifiedEligibilityStatus.map(_.toString), - eligibleTrialWithTrial.group.isVerified - ) -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/hypothesis/ApiPartialPatientHypothesis.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/hypothesis/ApiPartialPatientHypothesis.scala deleted file mode 100644 index 0858ce1..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/hypothesis/ApiPartialPatientHypothesis.scala +++ /dev/null @@ -1,27 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.patient.hypothesis - -import xyz.driver.pdsuidomain.entities.PatientHypothesis -import org.davidbild.tristate.Tristate -import org.davidbild.tristate.contrib.play.ToJsPathOpsFromJsPath -import play.api.libs.functional.syntax._ -import play.api.libs.json._ - -final case class ApiPartialPatientHypothesis(rationale: Tristate[String]) { - - def applyTo(orig: PatientHypothesis): PatientHypothesis = { - orig.copy( - rationale = rationale.cata(Some(_), None, orig.rationale) - ) - } -} - -object ApiPartialPatientHypothesis { - - implicit val reads: Reads[ApiPartialPatientHypothesis] = - (__ \ "rationale").readTristate[String].map(x => ApiPartialPatientHypothesis(x)) - - implicit val writes: Writes[ApiPartialPatientHypothesis] = - (__ \ "rationale").writeTristate[String].contramap(_.rationale) - - implicit val format: Format[ApiPartialPatientHypothesis] = Format(reads, writes) -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/hypothesis/ApiPatientHypothesis.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/hypothesis/ApiPatientHypothesis.scala deleted file mode 100644 index 584ff72..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/hypothesis/ApiPatientHypothesis.scala +++ /dev/null @@ -1,35 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.patient.hypothesis - -import java.util.UUID - -import xyz.driver.pdsuidomain.entities.PatientHypothesis -import play.api.libs.functional.syntax._ -import play.api.libs.json._ - -final case class ApiPatientHypothesis(id: UUID, - patientId: String, - hypothesisId: UUID, - matchedTrials: Long, - rationale: Option[String], - isRationaleRequired: Boolean) - -object ApiPatientHypothesis { - - implicit val apiPatientHypothesisJsonFormat: Format[ApiPatientHypothesis] = ( - (JsPath \ "id").format[UUID] and - (JsPath \ "patientId").format[String] and - (JsPath \ "hypothesisId").format[UUID] and - (JsPath \ "matchedTrials").format[Long] and - (JsPath \ "rationale").formatNullable[String] and - (JsPath \ "isRationaleRequired").format[Boolean] - )(ApiPatientHypothesis.apply, unlift(ApiPatientHypothesis.unapply)) - - def fromDomain(patientHypothesis: PatientHypothesis, isRationaleRequired: Boolean) = ApiPatientHypothesis( - id = patientHypothesis.id.id, - patientId = patientHypothesis.patientId.toString, - hypothesisId = patientHypothesis.hypothesisId.id, - matchedTrials = patientHypothesis.matchedTrials, - rationale = patientHypothesis.rationale, - isRationaleRequired = isRationaleRequired - ) -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/label/ApiPartialPatientLabel.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/label/ApiPartialPatientLabel.scala deleted file mode 100644 index d92872c..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/label/ApiPartialPatientLabel.scala +++ /dev/null @@ -1,43 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.patient.label - -import xyz.driver.pdsuidomain.entities.PatientLabel -import org.davidbild.tristate.Tristate -import org.davidbild.tristate.contrib.play.ToJsPathOpsFromJsPath -import play.api.data.validation.ValidationError -import play.api.libs.functional.syntax._ -import play.api.libs.json._ -import xyz.driver.entities.labels.LabelValue - -final case class ApiPartialPatientLabel(primaryValue: Option[String], verifiedPrimaryValue: Tristate[String]) { - - def applyTo(orig: PatientLabel): PatientLabel = { - orig.copy( - primaryValue = primaryValue.flatMap(LabelValue.fromString).orElse(orig.primaryValue), - verifiedPrimaryValue = verifiedPrimaryValue.cata(x => LabelValue.fromString(x), None, orig.verifiedPrimaryValue) - ) - } -} - -object ApiPartialPatientLabel { - - implicit val format: Format[ApiPartialPatientLabel] = ( - (JsPath \ "primaryValue").formatNullable[String]( - Format(Reads - .of[String] - .filter(ValidationError("unknown primary value"))({ - case x if LabelValue.fromString(x).isDefined => true - case _ => false - }), - Writes.of[String])) and - (JsPath \ "verifiedPrimaryValue").formatTristate[String]( - Format( - Reads - .of[String] - .filter(ValidationError("unknown verified primary value"))({ - case x if LabelValue.fromString(x).isDefined => true - case _ => false - }), - Writes.of[String] - )) - )(ApiPartialPatientLabel.apply, unlift(ApiPartialPatientLabel.unapply)) -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/label/ApiPatientLabel.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/label/ApiPatientLabel.scala deleted file mode 100644 index cc8532d..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/label/ApiPatientLabel.scala +++ /dev/null @@ -1,55 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.patient.label - -import xyz.driver.pdsuidomain.entities.PatientLabel -import play.api.data.validation.ValidationError -import play.api.libs.functional.syntax._ -import play.api.libs.json._ -import xyz.driver.entities.labels.LabelValue - -final case class ApiPatientLabel(id: Long, - labelId: Long, - primaryValue: Option[String], - verifiedPrimaryValue: Option[String], - score: Int, - isImplicitMatch: Boolean, - isVisible: Boolean, - isVerified: Boolean) - -object ApiPatientLabel { - - implicit val apiPatientLabelJsonFormat: Format[ApiPatientLabel] = ( - (JsPath \ "id").format[Long] and - (JsPath \ "labelId").format[Long] and - (JsPath \ "primaryValue").formatNullable[String]( - Format(Reads - .of[String] - .filter(ValidationError("unknown value"))({ - case x if LabelValue.fromString(x).isDefined => true - case _ => false - }), - Writes.of[String])) and - (JsPath \ "verifiedPrimaryValue").formatNullable[String]( - Format(Reads - .of[String] - .filter(ValidationError("unknown value"))({ - case x if LabelValue.fromString(x).isDefined => true - case _ => false - }), - Writes.of[String])) and - (JsPath \ "score").format[Int] and - (JsPath \ "isImplicitMatch").format[Boolean] and - (JsPath \ "isVisible").format[Boolean] and - (JsPath \ "isVerified").format[Boolean] - )(ApiPatientLabel.apply, unlift(ApiPatientLabel.unapply)) - - def fromDomain(patientLabel: PatientLabel, isVerified: Boolean): ApiPatientLabel = ApiPatientLabel( - id = patientLabel.id.id, - labelId = patientLabel.labelId.id, - primaryValue = patientLabel.primaryValue.map(_.toString), - verifiedPrimaryValue = patientLabel.verifiedPrimaryValue.map(_.toString), - score = patientLabel.score, - isImplicitMatch = patientLabel.isImplicitMatch, - isVisible = patientLabel.isVisible, - isVerified = isVerified - ) -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/label/ApiPatientLabelDefiningCriteria.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/label/ApiPatientLabelDefiningCriteria.scala deleted file mode 100644 index 16b9cc9..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/label/ApiPatientLabelDefiningCriteria.scala +++ /dev/null @@ -1,29 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.patient.label - -import play.api.data.validation.ValidationError -import play.api.libs.functional.syntax._ -import play.api.libs.json._ -import xyz.driver.entities.labels.LabelValue -import xyz.driver.pdsuidomain.entities.PatientLabel - -final case class ApiPatientLabelDefiningCriteria(labelId: Long, value: Option[String]) - -object ApiPatientLabelDefiningCriteria { - - implicit val format: Format[ApiPatientLabelDefiningCriteria] = ( - (JsPath \ "labelId").format[Long] and - (JsPath \ "value").formatNullable[String]( - Format(Reads - .of[String] - .filter(ValidationError("unknown value"))({ - case x if LabelValue.fromString(x).isDefined => true - case _ => false - }), - Writes.of[String])) - )(ApiPatientLabelDefiningCriteria.apply, unlift(ApiPatientLabelDefiningCriteria.unapply)) - - def fromDomain(x: PatientLabel) = ApiPatientLabelDefiningCriteria( - labelId = x.labelId.id, - value = x.verifiedPrimaryValue.map(_.toString) - ) -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/trial/ApiPartialPatientCriterion.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/trial/ApiPartialPatientCriterion.scala deleted file mode 100644 index 09538b8..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/trial/ApiPartialPatientCriterion.scala +++ /dev/null @@ -1,47 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.patient.trial - -import xyz.driver.pdsuidomain.entities.PatientCriterion -import org.davidbild.tristate.Tristate -import org.davidbild.tristate.contrib.play.ToJsPathOpsFromJsPath -import play.api.data.validation.ValidationError -import play.api.libs.functional.syntax._ -import play.api.libs.json.{Format, JsPath, Reads, Writes} -import xyz.driver.entities.labels.LabelValue - -final case class ApiPartialPatientCriterion(eligibilityStatus: Option[String], - verifiedEligibilityStatus: Tristate[String]) { - - def applyTo(orig: PatientCriterion): PatientCriterion = { - orig.copy( - eligibilityStatus = eligibilityStatus.flatMap(LabelValue.fromString).orElse(orig.eligibilityStatus), - verifiedEligibilityStatus = - verifiedEligibilityStatus.cata(x => LabelValue.fromString(x), None, orig.verifiedEligibilityStatus) - ) - } -} - -object ApiPartialPatientCriterion { - - implicit val format: Format[ApiPartialPatientCriterion] = ( - (JsPath \ "eligibilityStatus").formatNullable[String]( - Format( - Reads - .of[String] - .filter(ValidationError("unknown eligibility status"))({ - case x if LabelValue.fromString(x).isDefined => true - case _ => false - }), - Writes.of[String] - )) and - (JsPath \ "verifiedEligibilityStatus").formatTristate[String]( - Format( - Reads - .of[String] - .filter(ValidationError("unknown verified eligibility status"))({ - case x if LabelValue.fromString(x).isDefined => true - case _ => false - }), - Writes.of[String] - )) - )(ApiPartialPatientCriterion.apply, unlift(ApiPartialPatientCriterion.unapply)) -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/trial/ApiPartialPatientCriterionList.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/trial/ApiPartialPatientCriterionList.scala deleted file mode 100644 index b7616a1..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/trial/ApiPartialPatientCriterionList.scala +++ /dev/null @@ -1,37 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.patient.trial - -import xyz.driver.pdsuicommon.domain.LongId -import xyz.driver.pdsuidomain.entities.PatientCriterion -import play.api.data.validation.ValidationError -import play.api.libs.functional.syntax._ -import play.api.libs.json.{Format, JsPath, Reads, Writes} -import xyz.driver.entities.labels.LabelValue -import xyz.driver.pdsuidomain.services.PatientCriterionService.DraftPatientCriterion - -final case class ApiPartialPatientCriterionList(id: Long, - eligibilityStatus: Option[String], - isVerified: Option[Boolean]) { - - def toDomain: DraftPatientCriterion = DraftPatientCriterion( - id = LongId[PatientCriterion](id), - eligibilityStatus = eligibilityStatus.flatMap(LabelValue.fromString), - isVerified = isVerified - ) -} - -object ApiPartialPatientCriterionList { - - implicit val format: Format[ApiPartialPatientCriterionList] = ( - (JsPath \ "id").format[Long] and - (JsPath \ "eligibilityStatus").formatNullable[String](Format( - Reads - .of[String] - .filter(ValidationError("unknown eligibility status"))({ - case x if LabelValue.fromString(x).isDefined => true - case _ => false - }), - Writes.of[String] - )) and - (JsPath \ "isVerified").formatNullable[Boolean] - )(ApiPartialPatientCriterionList.apply, unlift(ApiPartialPatientCriterionList.unapply)) -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/trial/ApiPatientCriterion.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/trial/ApiPatientCriterion.scala deleted file mode 100644 index b9bf772..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/trial/ApiPatientCriterion.scala +++ /dev/null @@ -1,75 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.patient.trial - -import java.time.{ZoneId, ZonedDateTime} - -import xyz.driver.pdsuicommon.domain.LongId -import xyz.driver.pdsuidomain.entities.{PatientCriterion, PatientCriterionArm} -import play.api.data.validation.ValidationError -import play.api.libs.functional.syntax._ -import play.api.libs.json.{Format, JsPath, Reads, Writes} -import xyz.driver.entities.labels.{Label, LabelValue} - -final case class ApiPatientCriterion(id: Long, - labelId: Long, - nctId: String, - criterionId: Long, - criterionText: String, - criterionValue: Option[String], - criterionIsDefining: Boolean, - criterionIsCompound: Boolean, - arms: List[String], - eligibilityStatus: Option[String], - verifiedEligibilityStatus: Option[String], - isVerified: Boolean, - isVisible: Boolean, - lastUpdate: ZonedDateTime) - -object ApiPatientCriterion { - - implicit val format: Format[ApiPatientCriterion] = ( - (JsPath \ "id").format[Long] and - (JsPath \ "labelId").format[Long] and - (JsPath \ "nctId").format[String] and - (JsPath \ "criterionId").format[Long] and - (JsPath \ "criterionText").format[String] and - (JsPath \ "criterionValue").formatNullable[String](Format(Reads.of[String].filter(ValidationError("unknown value"))({ x => - x == "Yes" || x == "No" - }), Writes.of[String])) and - (JsPath \ "criterionIsDefining").format[Boolean] and - (JsPath \ "criterionIsCompound").format[Boolean] and - (JsPath \ "arms").format[List[String]] and - (JsPath \ "eligibilityStatus").formatNullable[String](Format(Reads.of[String].filter(ValidationError("unknown status"))({ - case x if LabelValue.fromString(x).isDefined => true - case _ => false - }), Writes.of[String])) and - (JsPath \ "verifiedEligibilityStatus").formatNullable[String](Format( - Reads.of[String].filter(ValidationError("unknown status"))({ - case x if LabelValue.fromString(x).isDefined => true - case _ => false - }), Writes.of[String])) and - (JsPath \ "isVerified").format[Boolean] and - (JsPath \ "isVisible").format[Boolean] and - (JsPath \ "lastUpdate").format[ZonedDateTime] - ) (ApiPatientCriterion.apply, unlift(ApiPatientCriterion.unapply)) - - def fromDomain(patientCriterion: PatientCriterion, - labelId: LongId[Label], - arms: List[PatientCriterionArm]) = ApiPatientCriterion( - id = patientCriterion.id.id, - labelId = labelId.id, - nctId = patientCriterion.nctId.id, - criterionId = patientCriterion.criterionId.id, - criterionText = patientCriterion.criterionText, - criterionValue = patientCriterion.criterionValue.map { x => - LabelValue.fromBoolean(x).toString - }, - criterionIsDefining = patientCriterion.criterionIsDefining, - criterionIsCompound = patientCriterion.criterionValue.isEmpty, - arms = arms.map(_.armName), - eligibilityStatus = patientCriterion.eligibilityStatus.map(_.toString), - verifiedEligibilityStatus = patientCriterion.verifiedEligibilityStatus.map(_.toString), - isVerified = patientCriterion.isVerified, - isVisible = patientCriterion.isVisible, - lastUpdate = ZonedDateTime.of(patientCriterion.lastUpdate, ZoneId.of("Z")) - ) -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientcriterion.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patientcriterion.scala index f41c846..fc0b725 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientcriterion.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patientcriterion.scala @@ -1,10 +1,10 @@ -package xyz.driver.pdsuidomain.formats.json.sprayformats +package xyz.driver.pdsuidomain.formats.json 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.PatientCriterionService.{DraftPatientCriterion, RichPatientCriterion} -import xyz.driver.formats.json.labels._ object patientcriterion { import DefaultJsonProtocol._ diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientdefiningcriteria.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patientdefiningcriteria.scala index 746c7b4..0b4fbae 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientdefiningcriteria.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patientdefiningcriteria.scala @@ -1,8 +1,8 @@ -package xyz.driver.pdsuidomain.formats.json.sprayformats +package xyz.driver.pdsuidomain.formats.json import spray.json._ -import xyz.driver.pdsuidomain.entities.PatientLabel import xyz.driver.formats.json.labels._ +import xyz.driver.pdsuidomain.entities.PatientLabel object patientdefiningcriteria { import DefaultJsonProtocol._ diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patienteligibletrial.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patienteligibletrial.scala index 342d3a8..4c006f9 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patienteligibletrial.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patienteligibletrial.scala @@ -1,9 +1,9 @@ -package xyz.driver.pdsuidomain.formats.json.sprayformats +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 -import xyz.driver.formats.json.labels._ object patienteligibletrial { import DefaultJsonProtocol._ diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patienthistory.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patienthistory.scala index da7a664..bd20b27 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patienthistory.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patienthistory.scala @@ -1,4 +1,4 @@ -package xyz.driver.pdsuidomain.formats.json.sprayformats +package xyz.driver.pdsuidomain.formats.json import spray.json._ import xyz.driver.core.json.EnumJsonFormat @@ -6,8 +6,8 @@ import xyz.driver.pdsuidomain.entities._ object patienthistory { import DefaultJsonProtocol._ - import common._ import PatientHistory._ + import common._ implicit val patientStateFormat = new EnumJsonFormat[State]( "Verify" -> State.Verify, diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patienthistory/ApiPatientHistory.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patienthistory/ApiPatientHistory.scala deleted file mode 100644 index cdcd510..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patienthistory/ApiPatientHistory.scala +++ /dev/null @@ -1,28 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.patienthistory - -import java.time.{ZoneId, ZonedDateTime} -import java.util.UUID - -import play.api.libs.json.{Format, Json} -import xyz.driver.pdsuidomain.entities.PatientHistory - -final case class ApiPatientHistory(id: Long, - executor: String, - patientId: UUID, - state: String, - action: String, - created: ZonedDateTime) - -object ApiPatientHistory { - implicit val format: Format[ApiPatientHistory] = - Json.format[ApiPatientHistory] - - def fromDomain(x: PatientHistory) = ApiPatientHistory( - id = x.id.id, - executor = x.executor.id, - patientId = x.patientId.id, - state = PatientHistory.State.stateToString(x.state), - action = PatientHistory.Action.actionToString(x.action), - created = ZonedDateTime.of(x.created, ZoneId.of("Z")) - ) -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patienthypothesis.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patienthypothesis.scala index b8c0058..a36bac2 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patienthypothesis.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patienthypothesis.scala @@ -1,4 +1,4 @@ -package xyz.driver.pdsuidomain.formats.json.sprayformats +package xyz.driver.pdsuidomain.formats.json import spray.json._ import xyz.driver.pdsuidomain.entities._ diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientissue.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patientissue.scala index d325a53..5a2955f 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientissue.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patientissue.scala @@ -1,4 +1,4 @@ -package xyz.driver.pdsuidomain.formats.json.sprayformats +package xyz.driver.pdsuidomain.formats.json import java.time.LocalDateTime diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patientissue/ApiPartialPatientIssue.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patientissue/ApiPartialPatientIssue.scala deleted file mode 100644 index eadd1f8..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patientissue/ApiPartialPatientIssue.scala +++ /dev/null @@ -1,33 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.patientissue - -import java.time.LocalDateTime - -import play.api.libs.functional.syntax._ -import play.api.libs.json._ -import xyz.driver.pdsuicommon.domain._ -import xyz.driver.pdsuidomain.entities.{Patient, PatientIssue} - -final case class ApiPartialPatientIssue(text: String, archiveRequired: Boolean) { - def applyTo(x: PatientIssue): PatientIssue = x.copy( - text = text, - archiveRequired = archiveRequired - ) - - def toDomain(userId: StringId[User], patientId: UuidId[Patient]) = - PatientIssue( - id = LongId(0), - userId = userId, - patientId = patientId, - lastUpdate = LocalDateTime.MIN, - isDraft = true, - text = text, - archiveRequired = false - ) -} - -object ApiPartialPatientIssue { - implicit val format: Format[ApiPartialPatientIssue] = ( - (JsPath \ "text").format[String] and - (JsPath \ "archiveRequired").format[Boolean] - )(ApiPartialPatientIssue.apply, unlift(ApiPartialPatientIssue.unapply)) -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patientissue/ApiPatientIssue.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patientissue/ApiPatientIssue.scala deleted file mode 100644 index d1a216c..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patientissue/ApiPatientIssue.scala +++ /dev/null @@ -1,34 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.patientissue - -import java.time.{ZoneId, ZonedDateTime} - -import play.api.libs.functional.syntax._ -import play.api.libs.json._ -import xyz.driver.pdsuidomain.entities.PatientIssue - -final case class ApiPatientIssue(id: Long, - text: String, - lastUpdate: ZonedDateTime, - userId: String, - isDraft: Boolean, - archiveRequired: Boolean) - -object ApiPatientIssue { - implicit val format: Format[ApiPatientIssue] = ( - (JsPath \ "id").format[Long] and - (JsPath \ "text").format[String] and - (JsPath \ "lastUpdate").format[ZonedDateTime] and - (JsPath \ "userId").format[String] and - (JsPath \ "isDraft").format[Boolean] and - (JsPath \ "archiveRequired").format[Boolean] - )(ApiPatientIssue.apply, unlift(ApiPatientIssue.unapply)) - - def fromDomain(x: PatientIssue) = ApiPatientIssue( - id = x.id.id, - text = x.text, - lastUpdate = ZonedDateTime.of(x.lastUpdate, ZoneId.of("Z")), - userId = x.userId.id, - isDraft = x.isDraft, - archiveRequired = x.archiveRequired - ) -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientlabel.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patientlabel.scala index 57dca1e..15fec45 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientlabel.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patientlabel.scala @@ -1,12 +1,13 @@ -package xyz.driver.pdsuidomain.formats.json.sprayformats +package xyz.driver.pdsuidomain.formats.json 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.sprayformats.record._ -import xyz.driver.pdsuidomain.formats.json.sprayformats.document._ +import xyz.driver.pdsuidomain.formats.json.record._ +import xyz.driver.pdsuidomain.formats.json.document._ object patientlabel { import DefaultJsonProtocol._ diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/queue/ApiQueueUploadItem.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/queue/ApiQueueUploadItem.scala deleted file mode 100644 index cd76670..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/queue/ApiQueueUploadItem.scala +++ /dev/null @@ -1,38 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.queue - -import java.time.LocalDateTime - -import xyz.driver.pdsuicommon.concurrent.BridgeUploadQueue -import play.api.libs.json.{Format, Json} - -final case class ApiQueueUploadItem(kind: String, - tag: String, - created: LocalDateTime, - attempts: Int, - nextAttempt: LocalDateTime, - completed: Boolean) { - def toDomain = BridgeUploadQueue.Item( - kind = kind, - tag = tag, - created = created, - attempts = attempts, - nextAttempt = nextAttempt, - completed = true, - dependencyKind = None, - dependencyTag = None - ) -} - -object ApiQueueUploadItem { - - def fromDomain(domain: BridgeUploadQueue.Item) = ApiQueueUploadItem( - kind = domain.kind, - tag = domain.tag, - created = domain.created, - attempts = domain.attempts, - nextAttempt = domain.nextAttempt, - completed = domain.completed - ) - - implicit val format: Format[ApiQueueUploadItem] = Json.format[ApiQueueUploadItem] -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/record.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/record.scala index 09517e6..9a8dc9c 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/record.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/record.scala @@ -1,4 +1,4 @@ -package xyz.driver.pdsuidomain.formats.json.sprayformats +package xyz.driver.pdsuidomain.formats.json import java.time.LocalDateTime import java.util.UUID diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/record/ApiCreateRecord.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/record/ApiCreateRecord.scala deleted file mode 100644 index fd14f7c..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/record/ApiCreateRecord.scala +++ /dev/null @@ -1,33 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.record - -import java.time.LocalDateTime -import java.util.UUID - -import xyz.driver.pdsuicommon.domain._ -import xyz.driver.pdsuidomain.entities._ -import play.api.libs.json._ - -final case class ApiCreateRecord(disease: String, patientId: String, requestId: UUID) { - - def toDomain = MedicalRecord( - id = LongId(0), - status = MedicalRecord.Status.New, - previousStatus = None, - assignee = None, - previousAssignee = None, - lastActiveUserId = None, - patientId = UuidId(patientId), - requestId = RecordRequestId(requestId), - disease = disease, - caseId = None, - physician = None, - meta = None, - lastUpdate = LocalDateTime.now(), - totalPages = 0 - ) -} - -object ApiCreateRecord { - - implicit val format: Format[ApiCreateRecord] = Json.format[ApiCreateRecord] -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/record/ApiRecord.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/record/ApiRecord.scala deleted file mode 100644 index 00441a1..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/record/ApiRecord.scala +++ /dev/null @@ -1,110 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.record - -import java.time.{ZoneId, ZonedDateTime} -import java.util.UUID - -import xyz.driver.pdsuidomain.entities.CaseId -import xyz.driver.pdsuidomain.entities.MedicalRecord -import xyz.driver.pdsuidomain.entities.MedicalRecord.Status -import xyz.driver.pdsuidomain.entities.RecordRequestId -import play.api.data.validation.ValidationError -import play.api.libs.functional.syntax._ -import play.api.libs.json._ -import xyz.driver.pdsuicommon.json.JsonSerializer -import xyz.driver.pdsuicommon.domain.{LongId, StringId, TextJson, UuidId} - -object ApiRecord { - - private val emptyMeta: String = - "[]" - - private val statusFormat = Format( - Reads.StringReads.filter(ValidationError("unknown status")) { - case x if MedicalRecordStatus.statusFromString.isDefinedAt(x) => true - case _ => false - }, - Writes.StringWrites - ) - - implicit val format: Format[ApiRecord] = ( - (JsPath \ "id").format[Long] and - (JsPath \ "patientId").format[String] and - (JsPath \ "caseId").formatNullable[String] and - (JsPath \ "disease").format[String] and - (JsPath \ "physician").formatNullable[String] and - (JsPath \ "lastUpdate").format[ZonedDateTime] and - (JsPath \ "status").format(statusFormat) and - (JsPath \ "previousStatus").formatNullable(statusFormat) and - (JsPath \ "assignee").formatNullable[String] and - (JsPath \ "previousAssignee").formatNullable[String] and - (JsPath \ "lastActiveUser").formatNullable[String] and - (JsPath \ "requestId").format[UUID] and - (JsPath \ "meta").format(Format(Reads { x => - JsSuccess(Json.stringify(x)) - }, Writes[String](Json.parse))) and - (JsPath \ "totalPages").format[Int] - )(ApiRecord.apply, unlift(ApiRecord.unapply)) - - def fromDomain(record: MedicalRecord) = ApiRecord( - id = record.id.id, - patientId = record.patientId.toString, - caseId = record.caseId.map(_.id), - disease = record.disease, - physician = record.physician, - lastUpdate = ZonedDateTime.of(record.lastUpdate, ZoneId.of("Z")), - status = MedicalRecordStatus.statusToString(record.status), - previousStatus = record.previousStatus.map(MedicalRecordStatus.statusToString), - assignee = record.assignee.map(_.id), - previousAssignee = record.previousAssignee.map(_.id), - lastActiveUser = record.lastActiveUserId.map(_.id), - requestId = record.requestId.id, - meta = record.meta.map(x => JsonSerializer.serialize(x.content)).getOrElse(emptyMeta), - totalPages = record.totalPages - ) -} - -final case class ApiRecord(id: Long, - patientId: String, - caseId: Option[String], - disease: String, - physician: Option[String], - lastUpdate: ZonedDateTime, - status: String, - previousStatus: Option[String], - assignee: Option[String], - previousAssignee: Option[String], - lastActiveUser: Option[String], - requestId: UUID, - meta: String, - totalPages: Int) { - - private def extractStatus(status: String): Status = - Status - .fromString(status) - .getOrElse( - throw new NoSuchElementException(s"Status $status not found") - ) - - def toDomain = MedicalRecord( - id = LongId(this.id), - status = extractStatus(this.status), - previousStatus = this.previousStatus.map(extractStatus), - assignee = this.assignee.map(StringId(_)), - previousAssignee = this.previousAssignee.map(StringId(_)), - lastActiveUserId = this.lastActiveUser.map(StringId(_)), - patientId = UuidId(patientId), - requestId = RecordRequestId(this.requestId), - disease = this.disease, - caseId = caseId.map(CaseId(_)), - physician = this.physician, - meta = { - if (this.meta == ApiRecord.emptyMeta) { - None - } else { - Some(TextJson(JsonSerializer.deserialize[List[MedicalRecord.Meta]](this.meta))) - } - }, - lastUpdate = this.lastUpdate.toLocalDateTime, - totalPages = 0 - ) -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/record/ApiUpdateRecord.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/record/ApiUpdateRecord.scala deleted file mode 100644 index 05d5a60..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/record/ApiUpdateRecord.scala +++ /dev/null @@ -1,52 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.record - -import org.davidbild.tristate.Tristate -import org.davidbild.tristate.contrib.play.ToJsPathOpsFromJsPath -import play.api.data.validation.ValidationError -import play.api.libs.functional.syntax._ -import play.api.libs.json._ -import xyz.driver.pdsuicommon.domain.{StringId, TextJson, User} -import xyz.driver.pdsuicommon.json.JsonSerializer -import xyz.driver.pdsuidomain.entities.MedicalRecord.Meta -import xyz.driver.pdsuidomain.entities._ - -final case class ApiUpdateRecord(status: Option[String], assignee: Tristate[String], meta: Tristate[String]) { - - def applyTo(orig: MedicalRecord): MedicalRecord = { - orig.copy( - status = status.map(MedicalRecordStatus.statusFromString).getOrElse(orig.status), - assignee = assignee.map(StringId[User]).cata(Some(_), None, orig.assignee), - meta = meta.cata(x => Some(TextJson(JsonSerializer.deserialize[List[Meta]](x))), None, orig.meta) - ) - } -} - -object ApiUpdateRecord { - - private val reads: Reads[ApiUpdateRecord] = ( - (JsPath \ "status").readNullable[String]( - Reads - .of[String] - .filter(ValidationError("unknown status"))({ - case x if MedicalRecordStatus.statusFromString.isDefinedAt(x) => true - case _ => false - })) and - (JsPath \ "assignee").readTristate[String] and - (JsPath \ "meta") - .readTristate(Reads { x => - JsSuccess(Json.stringify(x)) - }) - .map { - case Tristate.Present("[]") => Tristate.Absent - case x => x - } - )(ApiUpdateRecord.apply _) - - private val writes: Writes[ApiUpdateRecord] = ( - (JsPath \ "status").writeNullable[String] and - (JsPath \ "assignee").writeTristate[String] and - (JsPath \ "meta").writeTristate(Writes[String](Json.parse)) - )(unlift(ApiUpdateRecord.unapply)) - - implicit val format: Format[ApiUpdateRecord] = Format(reads, writes) -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/record/MedicalRecordStatus.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/record/MedicalRecordStatus.scala deleted file mode 100644 index a77b76b..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/record/MedicalRecordStatus.scala +++ /dev/null @@ -1,34 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.record - -import xyz.driver.pdsuidomain.entities.MedicalRecord.Status - -object MedicalRecordStatus { - - val statusFromString: PartialFunction[String, Status] = { - case "Unprocessed" => Status.Unprocessed - case "PreCleaning" => Status.PreCleaning - case "New" => Status.New - case "Cleaned" => Status.Cleaned - case "PreOrganized" => Status.PreOrganized - case "PreOrganizing" => Status.PreOrganizing - case "Reviewed" => Status.Reviewed - case "Organized" => Status.Organized - case "Done" => Status.Done - case "Flagged" => Status.Flagged - case "Archived" => Status.Archived - } - - def statusToString(x: Status): String = x match { - case Status.Unprocessed => "Unprocessed" - case Status.PreCleaning => "PreCleaning" - case Status.New => "New" - case Status.Cleaned => "Cleaned" - case Status.PreOrganized => "PreOrganized" - case Status.PreOrganizing => "PreOrganizing" - case Status.Reviewed => "Reviewed" - case Status.Organized => "Organized" - case Status.Done => "Done" - case Status.Flagged => "Flagged" - case Status.Archived => "Archived" - } -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/recordhistory.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/recordhistory.scala index bd14d43..00071e1 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/recordhistory.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/recordhistory.scala @@ -1,4 +1,4 @@ -package xyz.driver.pdsuidomain.formats.json.sprayformats +package xyz.driver.pdsuidomain.formats.json import spray.json._ import xyz.driver.core.json.EnumJsonFormat @@ -6,8 +6,8 @@ import xyz.driver.pdsuidomain.entities._ object recordhistory { import DefaultJsonProtocol._ - import common._ import MedicalRecordHistory._ + import common._ implicit val recordStateFormat = new EnumJsonFormat[State]( "Clean" -> State.Clean, diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/recordhistory/ApiRecordHistory.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/recordhistory/ApiRecordHistory.scala deleted file mode 100644 index c55a78f..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/recordhistory/ApiRecordHistory.scala +++ /dev/null @@ -1,27 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.recordhistory - -import java.time.{ZoneId, ZonedDateTime} - -import play.api.libs.json.{Format, Json} -import xyz.driver.pdsuidomain.entities.MedicalRecordHistory - -final case class ApiRecordHistory(id: Long, - executor: String, - recordId: Long, - state: String, - action: String, - created: ZonedDateTime) - -object ApiRecordHistory { - implicit val format: Format[ApiRecordHistory] = - Json.format[ApiRecordHistory] - - def fromDomain(x: MedicalRecordHistory) = ApiRecordHistory( - id = x.id.id, - executor = x.executor.id, - recordId = x.recordId.id, - state = MedicalRecordHistory.State.stateToString(x.state), - action = MedicalRecordHistory.Action.actionToString(x.action), - created = ZonedDateTime.of(x.created, ZoneId.of("Z")) - ) -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/recordissue.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/recordissue.scala index 4ac5f6d..29b12f6 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/recordissue.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/recordissue.scala @@ -1,4 +1,4 @@ -package xyz.driver.pdsuidomain.formats.json.sprayformats +package xyz.driver.pdsuidomain.formats.json import java.time.LocalDateTime diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/recordissue/ApiPartialRecordIssue.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/recordissue/ApiPartialRecordIssue.scala deleted file mode 100644 index 890ad69..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/recordissue/ApiPartialRecordIssue.scala +++ /dev/null @@ -1,42 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.recordissue - -import java.time.LocalDateTime - -import play.api.libs.functional.syntax._ -import play.api.libs.json._ -import xyz.driver.pdsuicommon.domain.{LongId, StringId, User} -import xyz.driver.pdsuidomain.entities.{MedicalRecord, MedicalRecordIssue} - -final case class ApiPartialRecordIssue(startPage: Option[Double], - endPage: Option[Double], - text: String, - archiveRequired: Boolean) { - def applyTo(x: MedicalRecordIssue): MedicalRecordIssue = x.copy( - startPage = startPage, - endPage = endPage, - text = text, - archiveRequired = archiveRequired - ) - - def toDomain(userId: StringId[User], recordId: LongId[MedicalRecord]) = - MedicalRecordIssue( - id = LongId(0), - userId = userId, - recordId = recordId, - startPage = startPage, - endPage = endPage, - lastUpdate = LocalDateTime.MIN, - isDraft = true, - text = text, - archiveRequired = false - ) -} - -object ApiPartialRecordIssue { - implicit val format: Format[ApiPartialRecordIssue] = ( - (JsPath \ "startPage").formatNullable[Double] and - (JsPath \ "endPage").formatNullable[Double] and - (JsPath \ "text").format[String] and - (JsPath \ "archiveRequired").format[Boolean] - )(ApiPartialRecordIssue.apply, unlift(ApiPartialRecordIssue.unapply)) -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/recordissue/ApiRecordIssue.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/recordissue/ApiRecordIssue.scala deleted file mode 100644 index 45bc469..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/recordissue/ApiRecordIssue.scala +++ /dev/null @@ -1,40 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.recordissue - -import java.time.{ZoneId, ZonedDateTime} - -import play.api.libs.functional.syntax._ -import play.api.libs.json._ -import xyz.driver.pdsuidomain.entities.MedicalRecordIssue - -final case class ApiRecordIssue(id: Long, - startPage: Option[Double], - endPage: Option[Double], - text: String, - lastUpdate: ZonedDateTime, - userId: String, - isDraft: Boolean, - archiveRequired: Boolean) - -object ApiRecordIssue { - implicit val format: Format[ApiRecordIssue] = ( - (JsPath \ "id").format[Long] and - (JsPath \ "startPage").formatNullable[Double] and - (JsPath \ "endPage").formatNullable[Double] and - (JsPath \ "text").format[String] and - (JsPath \ "lastUpdate").format[ZonedDateTime] and - (JsPath \ "userId").format[String] and - (JsPath \ "isDraft").format[Boolean] and - (JsPath \ "archiveRequired").format[Boolean] - )(ApiRecordIssue.apply, unlift(ApiRecordIssue.unapply)) - - def fromDomain(x: MedicalRecordIssue) = ApiRecordIssue( - id = x.id.id, - startPage = x.startPage, - endPage = x.endPage, - text = x.text, - lastUpdate = ZonedDateTime.of(x.lastUpdate, ZoneId.of("Z")), - userId = x.userId.id, - isDraft = x.isDraft, - archiveRequired = x.archiveRequired - ) -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/session/NewSessionRequest.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/session/NewSessionRequest.scala deleted file mode 100644 index fbe9689..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/session/NewSessionRequest.scala +++ /dev/null @@ -1,12 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.session - -import xyz.driver.pdsuicommon.domain.Email -import play.api.libs.json._ -import xyz.driver.pdsuicommon.json.Serialization._ - -final case class NewSessionRequest(email: Email, password: String) - -object NewSessionRequest { - - implicit val format: Format[NewSessionRequest] = Json.format[NewSessionRequest] -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/session/NewSessionResponse.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/session/NewSessionResponse.scala deleted file mode 100644 index 55e05b1..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/session/NewSessionResponse.scala +++ /dev/null @@ -1,11 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.session - -import play.api.libs.json.Json -import xyz.driver.pdsuidomain.formats.json.user.ApiUser - -final case class NewSessionResponse(token: String, user: ApiUser) - -object NewSessionResponse { - - implicit val format = Json.format[NewSessionResponse] -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/slotarm.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/slotarm.scala index 1d74916..7867cd6 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/slotarm.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/slotarm.scala @@ -1,4 +1,4 @@ -package xyz.driver.pdsuidomain.formats.json.sprayformats +package xyz.driver.pdsuidomain.formats.json import spray.json._ import xyz.driver.pdsuicommon.domain.{LongId, StringId} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/slotarm/ApiPartialSlotArm.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/slotarm/ApiPartialSlotArm.scala deleted file mode 100644 index 2f8e93f..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/slotarm/ApiPartialSlotArm.scala +++ /dev/null @@ -1,14 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.slotarm - -import xyz.driver.pdsuidomain.entities.SlotArm -import play.api.libs.json.{Format, Json} - -final case class ApiPartialSlotArm(name: String) { - - def applyTo(arm: SlotArm): SlotArm = arm.copy(name = name) -} - -object ApiPartialSlotArm { - - implicit val format: Format[ApiPartialSlotArm] = Json.format -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/slotarm/ApiSlotArm.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/slotarm/ApiSlotArm.scala deleted file mode 100644 index 375c1a2..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/slotarm/ApiSlotArm.scala +++ /dev/null @@ -1,35 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.slotarm - -import xyz.driver.pdsuicommon.domain.{LongId, StringId} -import xyz.driver.pdsuidomain.entities.SlotArm -import play.api.libs.functional.syntax._ -import play.api.libs.json._ - -final case class ApiSlotArm(id: Long, name: String, originalName: String, trialId: String) { - - def toDomain: SlotArm = SlotArm( - id = LongId(this.id), - name = this.name, - originalName = this.originalName, - trialId = StringId(this.trialId), - deleted = None // if we have an ApiSlotArm object, the SlotArm itself has not been deleted - ) - -} - -object ApiSlotArm { - - implicit val format: Format[ApiSlotArm] = ( - (JsPath \ "id").format[Long] and - (JsPath \ "name").format[String] and - (JsPath \ "originalName").format[String] and - (JsPath \ "trialId").format[String] - )(ApiSlotArm.apply, unlift(ApiSlotArm.unapply)) - - def fromDomain(arm: SlotArm): ApiSlotArm = ApiSlotArm( - id = arm.id.id, - name = arm.name, - originalName = arm.originalName, - trialId = arm.trialId.id - ) -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/slotarm/ApiSlotCreateArm.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/slotarm/ApiSlotCreateArm.scala deleted file mode 100644 index 3e52c13..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/slotarm/ApiSlotCreateArm.scala +++ /dev/null @@ -1,20 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.slotarm - -import xyz.driver.pdsuicommon.domain.{LongId, StringId} -import xyz.driver.pdsuidomain.entities.SlotArm -import play.api.libs.json.{Format, Json} - -final case class ApiCreateSlotArm(name: String, trialId: String) { - - def toDomain = SlotArm( - id = LongId(0), - name = name, - trialId = StringId(trialId), - originalName = name - ) -} - -object ApiCreateSlotArm { - - implicit val format: Format[ApiCreateSlotArm] = Json.format[ApiCreateSlotArm] -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/studydesign.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/studydesign.scala index 3002b38..60c7e70 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/studydesign.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/studydesign.scala @@ -1,4 +1,4 @@ -package xyz.driver.pdsuidomain.formats.json.sprayformats +package xyz.driver.pdsuidomain.formats.json import spray.json._ import xyz.driver.pdsuidomain.entities._ diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/studydesign/ApiStudyDesign.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/studydesign/ApiStudyDesign.scala deleted file mode 100644 index 12d40df..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/studydesign/ApiStudyDesign.scala +++ /dev/null @@ -1,23 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.studydesign - -import xyz.driver.pdsuidomain.entities.StudyDesign -import play.api.libs.functional.syntax._ -import play.api.libs.json.{Format, JsPath} - -final case class ApiStudyDesign(id: Long, name: String) { - - def toDomain: Option[StudyDesign] = StudyDesign.fromString(name) -} - -object ApiStudyDesign { - - implicit val format: Format[ApiStudyDesign] = ( - (JsPath \ "id").format[Long] and - (JsPath \ "name").format[String] - )(ApiStudyDesign.apply, unlift(ApiStudyDesign.unapply)) - - def fromDomain(studyDesign: StudyDesign) = ApiStudyDesign( - id = studyDesign.id.id, - name = studyDesign.name - ) -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/trial.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/trial.scala index b25ed1d..6cc2560 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/trial.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/trial.scala @@ -1,4 +1,4 @@ -package xyz.driver.pdsuidomain.formats.json.sprayformats +package xyz.driver.pdsuidomain.formats.json import java.time.{ZoneId, ZonedDateTime} @@ -24,7 +24,7 @@ object trial { "Archived" -> Status.Archived ) - implicit val trialWriter: RootJsonWriter[Trial] = new RootJsonWriter[Trial] { + implicit val trialFormat: RootJsonFormat[Trial] = new RootJsonFormat[Trial] { override def write(obj: Trial) = JsObject( "id" -> obj.id.toJson, @@ -46,6 +46,8 @@ object trial { "title" -> obj.title.toJson, "originalTitle" -> obj.originalTitle.toJson ) + + override def read(json: JsValue): Trial = jsonReader[Trial].read(json) } def applyUpdateToTrial(json: JsValue, orig: Trial): Trial = json match { diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/trial/ApiPartialTrial.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/trial/ApiPartialTrial.scala deleted file mode 100644 index f89f181..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/trial/ApiPartialTrial.scala +++ /dev/null @@ -1,44 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.trial - -import java.util.UUID - -import xyz.driver.pdsuicommon.domain.{LongId, UuidId} -import xyz.driver.pdsuidomain.entities.Trial -import org.davidbild.tristate.Tristate -import org.davidbild.tristate.contrib.play.ToJsPathOpsFromJsPath -import play.api.libs.functional.syntax._ -import play.api.libs.json._ - -final case class ApiPartialTrial(hypothesisId: Tristate[UUID], - studyDesignId: Tristate[Long], - overview: Tristate[String], - title: Tristate[String]) { - - def applyTo(orig: Trial): Trial = { - orig.copy( - hypothesisId = hypothesisId.map(UuidId(_)).cata(Some(_), None, orig.hypothesisId), - studyDesignId = studyDesignId.map(LongId(_)).cata(Some(_), None, orig.studyDesignId), - overview = overview.cata(Some(_), None, orig.overview), - title = title.cata(Some(_).getOrElse(""), "", orig.title) - ) - } -} - -object ApiPartialTrial { - - private val reads: Reads[ApiPartialTrial] = ( - (JsPath \ "hypothesisId").readTristate[UUID] and - (JsPath \ "studyDesignId").readTristate[Long] and - (JsPath \ "overview").readTristate[String] and - (JsPath \ "title").readTristate[String] - )(ApiPartialTrial.apply _) - - private val writes: Writes[ApiPartialTrial] = ( - (JsPath \ "hypothesisId").writeTristate[UUID] and - (JsPath \ "studyDesignId").writeTristate[Long] and - (JsPath \ "overview").writeTristate[String] and - (JsPath \ "title").writeTristate[String] - )(unlift(ApiPartialTrial.unapply)) - - implicit val format: Format[ApiPartialTrial] = Format(reads, writes) -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/trial/ApiTrial.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/trial/ApiTrial.scala deleted file mode 100644 index 133a2c8..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/trial/ApiTrial.scala +++ /dev/null @@ -1,96 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.trial - -import java.time.{ZoneId, ZonedDateTime} -import java.util.UUID - -import play.api.libs.functional.syntax._ -import play.api.libs.json._ -import xyz.driver.pdsuicommon.domain.{LongId, StringId, UuidId} -import xyz.driver.pdsuidomain.entities.Trial - -final case class ApiTrial(id: String, - externalId: UUID, - lastUpdate: ZonedDateTime, - status: String, - assignee: Option[String], - previousStatus: Option[String], - previousAssignee: Option[String], - lastActiveUser: Option[String], - phase: String, - hypothesisId: Option[UUID], - studyDesignId: Option[Long], - originalStudyDesign: Option[String], - isPartner: Boolean, - overview: Option[String], - overviewTemplate: String, - isUpdated: Boolean, - title: String, - originalTitle: String) { - - def toDomain = Trial( - id = StringId(this.id), - externalId = UuidId(this.externalId), - status = TrialStatus.statusFromString(this.status), - assignee = this.assignee.map(id => StringId(id)), - previousStatus = this.previousStatus.map(s => TrialStatus.statusFromString(s)), - previousAssignee = this.previousAssignee.map(id => StringId(id)), - lastActiveUserId = this.lastActiveUser.map(id => StringId(id)), - lastUpdate = this.lastUpdate.toLocalDateTime, - phase = this.phase, - hypothesisId = this.hypothesisId.map(id => UuidId(id)), - studyDesignId = this.studyDesignId.map(id => LongId(id)), - originalStudyDesign = this.originalStudyDesign, - isPartner = this.isPartner, - overview = this.overview, - overviewTemplate = this.overviewTemplate, - isUpdated = this.isUpdated, - title = this.title, - originalTitle = this.originalTitle - ) - -} - -object ApiTrial { - - implicit val format: Format[ApiTrial] = ( - (JsPath \ "id").format[String] and - (JsPath \ "externalid").format[UUID] and - (JsPath \ "lastUpdate").format[ZonedDateTime] and - (JsPath \ "status").format[String] and - (JsPath \ "assignee").formatNullable[String] and - (JsPath \ "previousStatus").formatNullable[String] and - (JsPath \ "previousAssignee").formatNullable[String] and - (JsPath \ "lastActiveUser").formatNullable[String] and - (JsPath \ "phase").format[String] and - (JsPath \ "hypothesisId").formatNullable[UUID] and - (JsPath \ "studyDesignId").formatNullable[Long] and - (JsPath \ "originalStudyDesignId").formatNullable[String] and - (JsPath \ "isPartner").format[Boolean] and - (JsPath \ "overview").formatNullable[String] and - (JsPath \ "overviewTemplate").format[String] and - (JsPath \ "isUpdated").format[Boolean] and - (JsPath \ "title").format[String] and - (JsPath \ "originalTitle").format[String] - )(ApiTrial.apply, unlift(ApiTrial.unapply)) - - def fromDomain(trial: Trial): ApiTrial = ApiTrial( - id = trial.id.id, - externalId = trial.externalId.id, - status = TrialStatus.statusToString(trial.status), - assignee = trial.assignee.map(_.id), - previousStatus = trial.previousStatus.map(TrialStatus.statusToString), - previousAssignee = trial.previousAssignee.map(_.id), - lastActiveUser = trial.lastActiveUserId.map(_.id), - lastUpdate = ZonedDateTime.of(trial.lastUpdate, ZoneId.of("Z")), - phase = trial.phase, - hypothesisId = trial.hypothesisId.map(_.id), - studyDesignId = trial.studyDesignId.map(_.id), - originalStudyDesign = trial.originalStudyDesign, - isPartner = trial.isPartner, - overview = trial.overview, - overviewTemplate = trial.overviewTemplate, - isUpdated = trial.isUpdated, - title = trial.title, - originalTitle = trial.originalTitle - ) -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/trial/TrialStatus.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/trial/TrialStatus.scala deleted file mode 100644 index a5b557b..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/trial/TrialStatus.scala +++ /dev/null @@ -1,30 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.trial - -import xyz.driver.pdsuidomain.entities.Trial.Status - -object TrialStatus { - - val statusFromString: PartialFunction[String, Status] = { - case "New" => Status.New - case "ReviewSummary" => Status.ReviewSummary - case "Summarized" => Status.Summarized - case "PendingUpdate" => Status.PendingUpdate - case "Update" => Status.Update - case "ReviewCriteria" => Status.ReviewCriteria - case "Done" => Status.Done - case "Flagged" => Status.Flagged - case "Archived" => Status.Archived - } - - def statusToString(x: Status): String = x match { - case Status.New => "New" - case Status.ReviewSummary => "ReviewSummary" - case Status.Summarized => "Summarized" - case Status.PendingUpdate => "PendingUpdate" - case Status.Update => "Update" - case Status.ReviewCriteria => "ReviewCriteria" - case Status.Done => "Done" - case Status.Flagged => "Flagged" - case Status.Archived => "Archived" - } -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/trialhistory.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/trialhistory.scala index 844c5f5..6185d5a 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/trialhistory.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/trialhistory.scala @@ -1,4 +1,4 @@ -package xyz.driver.pdsuidomain.formats.json.sprayformats +package xyz.driver.pdsuidomain.formats.json import spray.json._ import xyz.driver.core.json.EnumJsonFormat @@ -6,8 +6,8 @@ import xyz.driver.pdsuidomain.entities._ object trialhistory { import DefaultJsonProtocol._ - import common._ import TrialHistory._ + import common._ implicit val trialStateFormat = new EnumJsonFormat[State]( "Summarize" -> State.Summarize, diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/trialhistory/ApiTrialHistory.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/trialhistory/ApiTrialHistory.scala deleted file mode 100644 index 38faeb8..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/trialhistory/ApiTrialHistory.scala +++ /dev/null @@ -1,26 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.trialhistory - -import java.time.{ZoneId, ZonedDateTime} - -import play.api.libs.json.{Format, Json} -import xyz.driver.pdsuidomain.entities.TrialHistory - -final case class ApiTrialHistory(id: Long, - executor: String, - trialId: String, - state: String, - action: String, - created: ZonedDateTime) - -object ApiTrialHistory { - implicit val format: Format[ApiTrialHistory] = Json.format[ApiTrialHistory] - - def fromDomain(x: TrialHistory) = ApiTrialHistory( - id = x.id.id, - executor = x.executor.id, - trialId = x.trialId.id, - state = TrialHistory.State.stateToString(x.state), - action = TrialHistory.Action.actionToString(x.action), - created = ZonedDateTime.of(x.created, ZoneId.of("Z")) - ) -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/trialissue.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/trialissue.scala index d1ca191..b2a3023 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/trialissue.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/trialissue.scala @@ -1,4 +1,4 @@ -package xyz.driver.pdsuidomain.formats.json.sprayformats +package xyz.driver.pdsuidomain.formats.json import java.time.LocalDateTime diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/trialissue/ApiPartialTrialIssue.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/trialissue/ApiPartialTrialIssue.scala deleted file mode 100644 index fc31371..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/trialissue/ApiPartialTrialIssue.scala +++ /dev/null @@ -1,40 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.trialissue - -import java.time.LocalDateTime - -import play.api.libs.functional.syntax._ -import play.api.libs.json._ -import xyz.driver.pdsuicommon.domain.{LongId, StringId, User} -import xyz.driver.pdsuidomain.entities.{Trial, TrialIssue} - -final case class ApiPartialTrialIssue(text: String, evidence: String, archiveRequired: Boolean, meta: String) { - def applyTo(x: TrialIssue): TrialIssue = x.copy( - text = text, - evidence = evidence, - archiveRequired = archiveRequired, - meta = meta - ) - - def toDomain(userId: StringId[User], trialId: StringId[Trial]) = TrialIssue( - id = LongId(0), - userId = userId, - trialId = trialId, - lastUpdate = LocalDateTime.MIN, - isDraft = true, - text = text, - evidence = evidence, - archiveRequired = false, - meta = meta - ) -} - -object ApiPartialTrialIssue { - implicit val format: Format[ApiPartialTrialIssue] = ( - (JsPath \ "text").format[String] and - (JsPath \ "evidence").format[String] and - (JsPath \ "archiveRequired").format[Boolean] and - (JsPath \ "meta").format[String](Format(Reads { x => - JsSuccess(Json.stringify(x)) - }, Writes[String](Json.parse))) - )(ApiPartialTrialIssue.apply, unlift(ApiPartialTrialIssue.unapply)) -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/trialissue/ApiTrialIssue.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/trialissue/ApiTrialIssue.scala deleted file mode 100644 index c9475c6..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/trialissue/ApiTrialIssue.scala +++ /dev/null @@ -1,60 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.trialissue - -import java.time.{ZoneId, ZonedDateTime} - -import play.api.libs.functional.syntax._ -import play.api.libs.json._ -import xyz.driver.pdsuicommon.domain._ -import xyz.driver.pdsuidomain.entities.TrialIssue - -final case class ApiTrialIssue(id: Long, - trialId: String, - text: String, - lastUpdate: ZonedDateTime, - userId: String, - isDraft: Boolean, - evidence: String, - archiveRequired: Boolean, - meta: String) { - - def toDomain = TrialIssue( - id = LongId(this.id), - trialId = StringId(this.trialId), - text = this.text, - userId = StringId(this.userId), - lastUpdate = this.lastUpdate.toLocalDateTime, - isDraft = this.isDraft, - evidence = this.evidence, - archiveRequired = this.archiveRequired, - meta = this.meta - ) - -} - -object ApiTrialIssue { - implicit val format: Format[ApiTrialIssue] = ( - (JsPath \ "id").format[Long] and - (JsPath \ "trialId").format[String] and - (JsPath \ "text").format[String] and - (JsPath \ "lastUpdate").format[ZonedDateTime] and - (JsPath \ "userId").format[String] and - (JsPath \ "isDraft").format[Boolean] and - (JsPath \ "evidence").format[String] and - (JsPath \ "archiveRequired").format[Boolean] and - (JsPath \ "meta").format[String](Format(Reads { x => - JsSuccess(Json.stringify(x)) - }, Writes[String](Json.parse))) - )(ApiTrialIssue.apply, unlift(ApiTrialIssue.unapply)) - - def fromDomain(x: TrialIssue) = ApiTrialIssue( - id = x.id.id, - trialId = x.trialId.id, - text = x.text, - lastUpdate = ZonedDateTime.of(x.lastUpdate, ZoneId.of("Z")), - userId = x.userId.id, - isDraft = x.isDraft, - evidence = x.evidence, - archiveRequired = x.archiveRequired, - meta = x.meta - ) -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/user/ApiPartialUser.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/user/ApiPartialUser.scala deleted file mode 100644 index cf20d32..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/user/ApiPartialUser.scala +++ /dev/null @@ -1,76 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.user - -import java.util.UUID - -import xyz.driver.pdsuicommon.domain._ -import play.api.data.validation._ -import play.api.libs.functional.syntax._ -import play.api.libs.json._ - -import scala.collection._ -import scala.util.Try -import xyz.driver.pdsuicommon.json.JsonValidationException -import xyz.driver.pdsuicommon.json.Serialization.seqJsonFormat -import xyz.driver.pdsuicommon.validation.{AdditionalConstraints, JsonValidationErrors} - -final case class ApiPartialUser(email: Option[String], name: Option[String], roles: Option[Seq[String]]) { - - def applyTo(orig: User): Try[User] = Try { - val validation = Map( - JsPath \ "name" -> AdditionalConstraints.optionNonEmptyConstraint(name) - ) - - val validationErrors: JsonValidationErrors = validation.collect({ - case (fieldName, e: Invalid) => (fieldName, e.errors) - })(breakOut) - - if (validationErrors.isEmpty) { - orig.copy(name = name.get) - } else { - throw new JsonValidationException(validationErrors) - } - } - - def toDomain(id: StringId[User] = StringId(UUID.randomUUID().toString)): Try[User] = Try { - val validation = Map( - JsPath \ "email" -> AdditionalConstraints.optionNonEmptyConstraint(email), - JsPath \ "name" -> AdditionalConstraints.optionNonEmptyConstraint(name), - JsPath \ "roles" -> AdditionalConstraints.optionNonEmptyConstraint(roles) - ) - - val validationErrors: JsonValidationErrors = validation.collect({ - case (fieldName, e: Invalid) => (fieldName, e.errors) - })(breakOut) - - if (validationErrors.isEmpty) { - val userEmail = email.map(x => Email(x.toLowerCase)).get - User( - id = id, - email = userEmail, - name = name.get, - roles = roles.toSeq.flatMap(_.map(UserRole.roleFromString)).toSet, - latestActivity = None, - deleted = None - ) - } else { - throw new JsonValidationException(validationErrors) - } - } -} - -object ApiPartialUser { - - implicit val format: Format[ApiPartialUser] = ( - (JsPath \ "email").formatNullable[String](Format(Reads.email, Writes.StringWrites)) and - (JsPath \ "name").formatNullable[String]( - Format( - Reads.filterNot[String](ValidationError("Username is too long (max length is 255 chars)", 255))( - _.length > 255), - Writes.StringWrites - )) and - (JsPath \ "roles").formatNullable[Seq[String]]( - Format(seqJsonFormat[String].filter(ValidationError("unknown roles"))( - _.forall(UserRole.roleFromString.isDefinedAt)), - Writes.of[Seq[String]])) - )(ApiPartialUser.apply, unlift(ApiPartialUser.unapply)) -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/user/ApiUser.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/user/ApiUser.scala deleted file mode 100644 index c21edd1..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/user/ApiUser.scala +++ /dev/null @@ -1,39 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.user - -import java.time.{ZoneId, ZonedDateTime} - -import xyz.driver.pdsuicommon.domain.User -import xyz.driver.pdsuicommon.json.Serialization.seqJsonFormat -import play.api.data.validation.ValidationError -import play.api.libs.functional.syntax._ -import play.api.libs.json._ - -import scala.collection.Seq - -final case class ApiUser(id: String, - email: String, - name: String, - roles: Seq[String], - latestActivity: Option[ZonedDateTime]) - -object ApiUser { - - implicit val format: Format[ApiUser] = ( - (JsPath \ "id").format[String] and - (JsPath \ "email").format[String](Reads.email) and - (JsPath \ "name").format[String] and - (JsPath \ "roles").format( - Format( - seqJsonFormat[String].filter(ValidationError("unknown role"))(_.forall(UserRole.roleFromString.isDefinedAt)), - Writes.of[Seq[String]])) and - (JsPath \ "latestActivity").formatNullable[ZonedDateTime] - )(ApiUser.apply, unlift(ApiUser.unapply)) - - def fromDomain(user: User) = ApiUser( - user.id.id, - user.email.value, - user.name, - user.roles.map(UserRole.roleToString).toSeq, - user.latestActivity.map(ZonedDateTime.of(_, ZoneId.of("Z"))) - ) -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/user/UserRole.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/user/UserRole.scala deleted file mode 100644 index 412a969..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/user/UserRole.scala +++ /dev/null @@ -1,37 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.user - -import xyz.driver.pdsuicommon.domain.User.Role - -object UserRole { - - val roleFromString: PartialFunction[String, Role] = { - case "Cleaner" => Role.RecordCleaner - case "Organizer" => Role.RecordOrganizer - case "Extractor" => Role.DocumentExtractor - case "RecordAdmin" => Role.RecordAdmin - case "TrialSummarizer" => Role.TrialSummarizer - case "CriteriaCurator" => Role.CriteriaCurator - case "TrialAdmin" => Role.TrialAdmin - case "EligibilityVerifier" => Role.EligibilityVerifier - case "TreatmentMatchingAdmin" => Role.TreatmentMatchingAdmin - case "RoutesCurator" => Role.RoutesCurator - case "SystemUser" => Role.SystemUser - case "ResearchOncologist" => Role.ResearchOncologist - // No Mixed at this time - } - - def roleToString(x: Role): String = x match { - case Role.RecordCleaner => "Cleaner" - case Role.RecordOrganizer => "Organizer" - case Role.DocumentExtractor => "Extractor" - case Role.RecordAdmin => "RecordAdmin" - case Role.TrialSummarizer => "TrialSummarizer" - case Role.CriteriaCurator => "CriteriaCurator" - case Role.TrialAdmin => "TrialAdmin" - case Role.EligibilityVerifier => "EligibilityVerifier" - case Role.TreatmentMatchingAdmin => "TreatmentMatchingAdmin" - case Role.RoutesCurator => "RoutesCurator" - case Role.SystemUser => "SystemUser" - case Role.ResearchOncologist => "ResearchOncologist" - } -} diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/userhistory/ApiUserHistory.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/userhistory/ApiUserHistory.scala deleted file mode 100644 index 127337f..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/userhistory/ApiUserHistory.scala +++ /dev/null @@ -1,43 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.userhistory - -import java.time.{ZoneId, ZonedDateTime} - -import play.api.libs.functional.syntax._ -import play.api.libs.json.{Format, JsPath} -import xyz.driver.pdsuidomain.entities.UserHistory - -final case class ApiUserHistory(id: Long, - executor: String, - recordId: Option[Long], - documentId: Option[Long], - trialId: Option[String], - patientId: Option[String], - state: String, - action: String, - created: ZonedDateTime) - -object ApiUserHistory { - implicit val format: Format[ApiUserHistory] = ( - (JsPath \ "id").format[Long] and - (JsPath \ "executor").format[String] and - (JsPath \ "recordId").formatNullable[Long] and - (JsPath \ "documentId").formatNullable[Long] and - (JsPath \ "trialId").formatNullable[String] and - (JsPath \ "patientId").formatNullable[String] and - (JsPath \ "state").format[String] and - (JsPath \ "action").format[String] and - (JsPath \ "created").format[ZonedDateTime] - )(ApiUserHistory.apply, unlift(ApiUserHistory.unapply)) - - def fromDomain(x: UserHistory) = ApiUserHistory( - id = x.id.id, - executor = x.executor.id, - recordId = x.recordId.map(_.id), - documentId = x.documentId.map(_.id), - trialId = x.trialId.map(_.id), - patientId = x.patientId.map(_.id.toString), - state = UserHistory.State.stateToString(x.state), - action = UserHistory.Action.actionToString(x.action), - created = ZonedDateTime.of(x.created, ZoneId.of("Z")) - ) -} |