diff options
author | Jakob Odersky <jakob@driver.xyz> | 2017-07-05 19:02:13 -0700 |
---|---|---|
committer | Jakob Odersky <jakob@driver.xyz> | 2017-07-12 21:04:25 -0700 |
commit | f9ac0adf5c3bcfcde03bd3ea2bc2471b0d0f99fe (patch) | |
tree | 9e26568fe6598074a6de8815b465cbfc7ff69b7c /src/main/scala/xyz/driver/pdsuidomain/formats/json | |
parent | 3d902b5197db861c30325c159dc10cfb211ae209 (diff) | |
download | rest-query-f9ac0adf5c3bcfcde03bd3ea2bc2471b0d0f99fe.tar.gz rest-query-f9ac0adf5c3bcfcde03bd3ea2bc2471b0d0f99fe.tar.bz2 rest-query-f9ac0adf5c3bcfcde03bd3ea2bc2471b0d0f99fe.zip |
Implement REST services for trial curation
Diffstat (limited to 'src/main/scala/xyz/driver/pdsuidomain/formats/json')
6 files changed, 124 insertions, 24 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 index c823df5..3fbeac8 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/ListResponse.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/ListResponse.scala @@ -7,11 +7,11 @@ import xyz.driver.pdsuicommon.json.Serialization.seqJsonFormat import play.api.libs.functional.syntax._ import play.api.libs.json._ -case class ListResponse[+T](items: Seq[T], meta: ListResponse.Meta) +final case class ListResponse[+T](items: Seq[T], meta: ListResponse.Meta) object ListResponse { - case class Meta(itemsCount: Int, pageNumber: Int, pageSize: Int, lastUpdate: Option[LocalDateTime]) + 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 = { 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 index 2185e3a..32e2b54 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/arm/ApiArm.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/arm/ApiArm.scala @@ -1,22 +1,35 @@ 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, trialId: String) +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/intervention/ApiIntervention.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/intervention/ApiIntervention.scala index 39e0000..39acbde 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/intervention/ApiIntervention.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/intervention/ApiIntervention.scala @@ -1,6 +1,7 @@ package xyz.driver.pdsuidomain.formats.json.intervention -import xyz.driver.pdsuidomain.entities.InterventionWithArms +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} @@ -10,7 +11,31 @@ final case class ApiIntervention(id: Long, description: String, isActive: Boolean, arms: List[Long], - trialId: String) + trialId: String, + originalName: String, + originalDescription: 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), + description = this.description, + originalDescription = this.originalDescription, + isActive = this.isActive + ) + + InterventionWithArms(intervention, this.arms.map { armId => + InterventionArm(LongId(armId), intervention.id) + }) + + } + +} object ApiIntervention { @@ -21,7 +46,10 @@ object ApiIntervention { (JsPath \ "description").format[String] and (JsPath \ "isActive").format[Boolean] and (JsPath \ "arms").format[List[Long]] and - (JsPath \ "trialId").format[String] + (JsPath \ "trialId").format[String] and + (JsPath \ "originalName").format[String] and + (JsPath \ "originalDescription").format[String] and + (JsPath \ "originalType").formatNullable[String] )(ApiIntervention.apply, unlift(ApiIntervention.unapply)) def fromDomain(interventionWithArms: InterventionWithArms): ApiIntervention = { @@ -35,7 +63,10 @@ object ApiIntervention { description = intervention.description, isActive = intervention.isActive, arms = arms.map(_.armId.id), - trialId = intervention.trialId.id + trialId = intervention.trialId.id, + originalName = intervention.originalName, + originalDescription = intervention.originalDescription, + originalType = intervention.originalType ) } } 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 index 2591509..425eeac 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/message/ApiMessage.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/message/ApiMessage.scala @@ -4,6 +4,7 @@ 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, @@ -19,7 +20,26 @@ final case class ApiMessage(id: Long, endPage: Option[Double], evidence: Option[String], archiveRequired: Option[Boolean], - meta: Option[String]) + 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 { 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 index 940f1f0..2556feb 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/trial/ApiTrial.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/trial/ApiTrial.scala @@ -2,65 +2,99 @@ package xyz.driver.pdsuidomain.formats.json.trial import java.time.{ZoneId, ZonedDateTime} import java.util.UUID +import xyz.driver.pdsuicommon.domain.{LongId, StringId, UuidId} import xyz.driver.pdsuidomain.entities.Trial import play.api.libs.functional.syntax._ import play.api.libs.json._ final case class ApiTrial(id: String, - lastUpdate: Option[ZonedDateTime], + externalId: UUID, + lastUpdate: ZonedDateTime, status: String, assignee: Option[String], previousStatus: Option[String], previousAssignee: Option[String], lastActiveUser: Option[String], - condition: Option[String], - phase: Option[String], + condition: String, + phase: String, hypothesisId: Option[UUID], studyDesignId: Option[Long], + originalStudyDesign: Option[String], isPartner: Boolean, overview: Option[String], overviewTemplate: String, isUpdated: Boolean, - title: String) + 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(), + condition = Trial.Condition.fromString(this.condition), + 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 \ "lastUpdate").formatNullable[ZonedDateTime] 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 \ "condition").formatNullable[String] and - (JsPath \ "phase").formatNullable[String] and + (JsPath \ "condition").format[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] + (JsPath \ "title").format[String] and + (JsPath \ "otiginalTitle").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 = Option(ZonedDateTime.of(trial.lastUpdate, ZoneId.of("Z"))), - condition = Option(trial.condition.toString), - phase = Option(trial.phase), + lastUpdate = ZonedDateTime.of(trial.lastUpdate, ZoneId.of("Z")), + condition = trial.condition.toString, + 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 + title = trial.title, + originalTitle = trial.originalTitle ) } 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 index f31efb3..5fad653 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/user/ApiPartialUser.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/user/ApiPartialUser.scala @@ -63,10 +63,12 @@ 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 \ "name").formatNullable[String]( + Format( + Reads.filterNot[String](ValidationError("Username is too long (max length is 255 chars)", 255))( + _.length > 255), + Writes.StringWrites + )) and (JsPath \ "roleId").formatNullable[String]( Format(Reads .of[String] |