From 8166ef497437567c8e7aaa9b2a8d6482752c017b Mon Sep 17 00:00:00 2001 From: Aleksandr Date: Thu, 21 Sep 2017 16:42:49 +0700 Subject: Fixed meta attribute filling of MedicalRecord when one transforms it from ApiRecord; Fixed FuzzyValue fromString method: on proviedstring it transformes the string to lower case and capitalize it --- .../xyz/driver/pdsuicommon/domain/FuzzyValue.scala | 31 ++++--- .../formats/json/record/ApiRecord.scala | 94 ++++++++++++---------- 2 files changed, 73 insertions(+), 52 deletions(-) (limited to 'src') diff --git a/src/main/scala/xyz/driver/pdsuicommon/domain/FuzzyValue.scala b/src/main/scala/xyz/driver/pdsuicommon/domain/FuzzyValue.scala index 4e98f40..b0ee436 100644 --- a/src/main/scala/xyz/driver/pdsuicommon/domain/FuzzyValue.scala +++ b/src/main/scala/xyz/driver/pdsuicommon/domain/FuzzyValue.scala @@ -10,21 +10,34 @@ object FuzzyValue { case object No extends FuzzyValue case object Maybe extends FuzzyValue - val All: Set[FuzzyValue] = Set(Yes, No, Maybe) + private val yes = "Yes" + private val no = "No" + private val maybe = "Maybe" - def fromBoolean(x: Boolean): FuzzyValue = if (x) Yes else No + val All: Set[FuzzyValue] = { + Set(Yes, No, Maybe) + } + + def fromBoolean(x: Boolean): FuzzyValue = { + if (x) Yes else No + } + + implicit def toPhiString(x: FuzzyValue): PhiString = { + Unsafe(Utils.getClassSimpleName(x.getClass)) + } - implicit def toPhiString(x: FuzzyValue): PhiString = Unsafe(Utils.getClassSimpleName(x.getClass)) val fromString: PartialFunction[String, FuzzyValue] = { - case "Yes" => Yes - case "No" => No - case "Maybe" => Maybe + case fuzzy => fuzzy.toLowerCase.capitalize match { + case `yes` => Yes + case `no` => No + case `maybe` => Maybe + } } def valueToString(x: FuzzyValue): String = x match { - case Yes => "Yes" - case No => "No" - case Maybe => "Maybe" + case Yes => `yes` + case No => `no` + case Maybe => `maybe` } } 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 index b255892..6e85021 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/record/ApiRecord.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/record/ApiRecord.scala @@ -13,49 +13,11 @@ import play.api.libs.json._ import xyz.driver.pdsuicommon.json.JsonSerializer import xyz.driver.pdsuicommon.domain.{LongId, StringId, TextJson, UuidId} -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) { - - 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 = Some(TextJson(JsonSerializer.deserialize[List[MedicalRecord.Meta]](this.meta))), - predictedMeta = None, - predictedDocuments = None, - lastUpdate = this.lastUpdate.toLocalDateTime() - ) - -} - object ApiRecord { + private val emptyMeta: String = + "[]" + private val statusFormat = Format( Reads.StringReads.filter(ValidationError("unknown status")) { case x if MedicalRecordStatus.statusFromString.isDefinedAt(x) => true @@ -80,7 +42,7 @@ object ApiRecord { (JsPath \ "meta").format(Format(Reads { x => JsSuccess(Json.stringify(x)) }, Writes[String](Json.parse))) - )(ApiRecord.apply, unlift(ApiRecord.unapply)) + )(ApiRecord.apply, unlift(ApiRecord.unapply)) def fromDomain(record: MedicalRecord) = ApiRecord( id = record.id.id, @@ -95,6 +57,52 @@ object ApiRecord { previousAssignee = record.previousAssignee.map(_.id), lastActiveUser = record.lastActiveUserId.map(_.id), requestId = record.requestId.id, - meta = record.meta.map(x => JsonSerializer.serialize(x.content)).getOrElse("[]") + meta = record.meta.map(x => JsonSerializer.serialize(x.content)).getOrElse(emptyMeta) ) } + +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) { + + 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))) + } + }, + predictedMeta = None, + predictedDocuments = None, + lastUpdate = this.lastUpdate.toLocalDateTime() + ) +} \ No newline at end of file -- cgit v1.2.3 From 722ee2a778f4e7f541e0704b2bd83225db607697 Mon Sep 17 00:00:00 2001 From: Aleksandr Date: Thu, 21 Sep 2017 17:23:59 +0700 Subject: Fixed formatting code issues --- .../xyz/driver/pdsuicommon/domain/FuzzyValue.scala | 21 +++++++++------------ .../pdsuidomain/formats/json/record/ApiRecord.scala | 4 ++-- 2 files changed, 11 insertions(+), 14 deletions(-) (limited to 'src') diff --git a/src/main/scala/xyz/driver/pdsuicommon/domain/FuzzyValue.scala b/src/main/scala/xyz/driver/pdsuicommon/domain/FuzzyValue.scala index b0ee436..36c3de7 100644 --- a/src/main/scala/xyz/driver/pdsuicommon/domain/FuzzyValue.scala +++ b/src/main/scala/xyz/driver/pdsuicommon/domain/FuzzyValue.scala @@ -14,25 +14,22 @@ object FuzzyValue { private val no = "No" private val maybe = "Maybe" - val All: Set[FuzzyValue] = { + val All: Set[FuzzyValue] = Set(Yes, No, Maybe) - } - def fromBoolean(x: Boolean): FuzzyValue = { + def fromBoolean(x: Boolean): FuzzyValue = if (x) Yes else No - } - implicit def toPhiString(x: FuzzyValue): PhiString = { + implicit def toPhiString(x: FuzzyValue): PhiString = Unsafe(Utils.getClassSimpleName(x.getClass)) - } - val fromString: PartialFunction[String, FuzzyValue] = { - case fuzzy => fuzzy.toLowerCase.capitalize match { - case `yes` => Yes - case `no` => No - case `maybe` => Maybe - } + case fuzzy => + fuzzy.toLowerCase.capitalize match { + case `yes` => Yes + case `no` => No + case `maybe` => Maybe + } } def valueToString(x: FuzzyValue): String = x match { 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 index 6e85021..e7b58cd 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/record/ApiRecord.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/record/ApiRecord.scala @@ -42,7 +42,7 @@ object ApiRecord { (JsPath \ "meta").format(Format(Reads { x => JsSuccess(Json.stringify(x)) }, Writes[String](Json.parse))) - )(ApiRecord.apply, unlift(ApiRecord.unapply)) + )(ApiRecord.apply, unlift(ApiRecord.unapply)) def fromDomain(record: MedicalRecord) = ApiRecord( id = record.id.id, @@ -105,4 +105,4 @@ final case class ApiRecord(id: Long, predictedDocuments = None, lastUpdate = this.lastUpdate.toLocalDateTime() ) -} \ No newline at end of file +} -- cgit v1.2.3