aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/xyz/driver/pdsuidomain
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/scala/xyz/driver/pdsuidomain')
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/Arm.scala20
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/CaseId.scala10
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/Criterion.scala55
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/DirectReport.scala41
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/Document.scala317
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/DocumentHistory.scala90
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/DocumentIssue.scala23
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/ExtractedData.scala47
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/Hypothesis.scala13
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/Intervention.scala48
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/Keyword.scala31
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/Label.scala31
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/MedicalRecord.scala184
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/MedicalRecordHistory.scala93
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/MedicalRecordIssue.scala23
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/Message.scala34
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/Patient.scala71
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/PatientCriterion.scala67
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/PatientEligibleTrial.scala83
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/PatientHistory.scala92
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/PatientHypothesis.scala18
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/PatientIssue.scala21
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/PatientLabel.scala38
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/PatientLabelEvidenceView.scala28
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/PatientOrderId.scala14
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/RawPatientDocument.scala28
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/RawPatientLabel.scala30
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/RawTrialLabel.scala31
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/RecordRequestId.scala15
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/ScrapedTrial.scala81
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/Trial.scala105
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/TrialHistory.scala92
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/TrialIssue.scala23
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/UserHistory.scala145
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/export/patient/ExportPatientLabel.scala19
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/export/patient/ExportPatientLabelEvidence.scala32
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/export/patient/ExportPatientLabelEvidenceDocument.scala30
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/export/patient/ExportPatientWithLabels.scala27
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/export/trial/ExportTrialArm.scala15
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/export/trial/ExportTrialLabelCriterion.scala32
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/export/trial/ExportTrialWithLabels.scala57
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/ListResponse.scala56
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/arm/ApiArm.scala35
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/arm/ApiCreateArm.scala20
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/arm/ApiPartialArm.scala14
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/category/ApiCategory.scala23
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/criterion/ApiCriterion.scala55
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/criterion/ApiNewCriterion.scala43
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/criterion/ApiUpdateCriterion.scala60
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/document/ApiDocument.scala107
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/document/ApiDocumentType.scala28
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/document/ApiPartialDocument.scala124
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/document/ApiProviderType.scala28
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/documenthistory/ApiDocumentHistory.scala27
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/documentissue/ApiDocumentIssue.scala40
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/documentissue/ApiPartialDocumentIssue.scala42
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/evidence/ApiPatientLabelEvidence.scala34
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportPatientLabel.scala28
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportPatientLabelEvidence.scala38
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportPatientLabelEvidenceDocument.scala46
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportPatientWithLabels.scala31
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportTrialArm.scala27
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportTrialLabelCriterion.scala55
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportTrialWithLabels.scala53
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/extracteddata/ApiExtractedData.scala64
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/extracteddata/ApiPartialExtractedData.scala80
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/hypothesis/ApiHypothesis.scala35
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/intervention/ApiIntervention.scala72
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/intervention/ApiInterventionType.scala24
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/intervention/ApiPartialIntervention.scala44
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/keyword/ApiKeyword.scala23
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/label/ApiCriterionLabel.scala53
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/label/ApiExtractedDataLabel.scala40
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/label/ApiLabel.scala22
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/message/ApiMessage.scala79
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/message/ApiPartialMessage.scala82
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/password/PasswordCreateRequest.scala9
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/password/PasswordUpdateRequest.scala9
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/ApiPatient.scala73
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/PatientStatus.scala24
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/eligible/ApiPartialPatientEligibleTrial.scala18
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/eligible/ApiPatientEligibleTrial.scala51
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/hypothesis/ApiPartialPatientHypothesis.scala27
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/hypothesis/ApiPatientHypothesis.scala35
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/label/ApiPartialPatientLabel.scala44
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/label/ApiPatientLabel.scala47
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/label/ApiPatientLabelDefiningCriteria.scala29
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/trial/ApiPartialPatientCriterion.scala47
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/trial/ApiPartialPatientCriterionList.scala36
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/trial/ApiPatientCriterion.scala74
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/patienthistory/ApiPatientHistory.scala28
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/patientissue/ApiPartialPatientIssue.scala33
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/patientissue/ApiPatientIssue.scala34
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/queue/ApiQueueUploadItem.scala38
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/record/ApiCreateRecord.scala34
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/record/ApiRecord.scala100
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/record/ApiUpdateRecord.scala52
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/record/MedicalRecordStatus.scala34
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/recordhistory/ApiRecordHistory.scala27
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/recordissue/ApiPartialRecordIssue.scala42
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/recordissue/ApiRecordIssue.scala40
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/session/NewSessionRequest.scala12
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/session/NewSessionResponse.scala11
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/arm.scala44
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/bridgeuploadqueue.scala68
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/common.scala74
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/criterion.scala158
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/document.scala164
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/documenthistory.scala29
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/documentissue.scala77
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/export.scala78
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/extracteddata.scala148
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/hypothesis.scala12
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/intervention.scala60
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patient.scala46
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientcriterion.scala68
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientdefiningcriteria.scala18
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patienteligibletrial.scala39
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patienthistory.scala30
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patienthypothesis.scala37
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientissue.scala54
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientlabel.scala64
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/record.scala237
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/recordhistory.scala30
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/recordissue.scala79
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/studydesign.scala12
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/trial.scala90
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/trialhistory.scala30
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/trialissue.scala60
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/studydesign/ApiStudyDesign.scala24
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/trial/ApiPartialTrial.scala44
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/trial/ApiTrial.scala104
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/trial/TrialStatus.scala30
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/trialhistory/ApiTrialHistory.scala26
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/trialissue/ApiPartialTrialIssue.scala40
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/trialissue/ApiTrialIssue.scala60
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/user/ApiPartialUser.scala76
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/user/ApiUser.scala39
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/user/UserRole.scala37
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/userhistory/ApiUserHistory.scala43
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/ArmService.scala124
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/CriterionService.scala120
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/DocumentHistoryService.scala44
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/DocumentIssueService.scala93
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/DocumentService.scala136
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/DocumentTypeService.scala25
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/ExtractedDataService.scala123
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/HypothesisService.scala27
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/InterventionService.scala79
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/InterventionTypeService.scala27
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/MedicalRecordHistoryService.scala44
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/MedicalRecordIssueService.scala93
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/MedicalRecordService.scala112
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/MessageService.scala88
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/PatientCriterionService.scala118
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/PatientEligibleTrialService.scala132
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/PatientHistoryService.scala44
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/PatientHypothesisService.scala99
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/PatientIssueService.scala93
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/PatientLabelEvidenceService.scala64
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/PatientLabelService.scala117
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/PatientService.scala95
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/ProviderTypeService.scala26
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/QueueUploadService.scala76
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/ScrapedTrialsService.scala53
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/StudyDesignService.scala27
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/TrialHistoryService.scala44
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/TrialIssueService.scala93
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/TrialService.scala125
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/UserHistoryService.scala30
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/fake/FakeTrialService.scala109
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/rest/RestArmService.scala81
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/rest/RestCriterionService.scala86
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/rest/RestDocumentService.scala111
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/rest/RestDocumentTypeService.scala32
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/rest/RestExtractedDataService.scala97
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/rest/RestHelper.scala128
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/rest/RestHypothesisService.scala33
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/rest/RestInterventionService.scala64
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/rest/RestInterventionTypeService.scala36
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/rest/RestMedicalRecordService.scala119
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/rest/RestMessageService.scala87
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/rest/RestPatientService.scala72
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/rest/RestProviderTypeService.scala33
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/rest/RestStudyDesignService.scala33
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/rest/RestTrialService.scala113
186 files changed, 0 insertions, 10828 deletions
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/Arm.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/Arm.scala
deleted file mode 100644
index 2190b8d..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/Arm.scala
+++ /dev/null
@@ -1,20 +0,0 @@
-package xyz.driver.pdsuidomain.entities
-
-import java.time.LocalDateTime
-
-import xyz.driver.pdsuicommon.domain.{LongId, StringId}
-import xyz.driver.pdsuicommon.logging._
-
-final case class Arm(id: LongId[Arm],
- name: String,
- originalName: String,
- trialId: StringId[Trial],
- deleted: Option[LocalDateTime] = None)
-
-object Arm {
-
- implicit def toPhiString(x: Arm): PhiString = {
- import x._
- phi"Arm(id=$id, name=${Unsafe(x.name)}, trialId=${Unsafe(x.trialId)})"
- }
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/CaseId.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/CaseId.scala
deleted file mode 100644
index 751545e..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/CaseId.scala
+++ /dev/null
@@ -1,10 +0,0 @@
-package xyz.driver.pdsuidomain.entities
-
-import java.util.UUID
-
-final case class CaseId(id: String)
-
-object CaseId {
-
- def apply() = new CaseId(UUID.randomUUID().toString)
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/Criterion.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/Criterion.scala
deleted file mode 100644
index 0dfb33f..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/Criterion.scala
+++ /dev/null
@@ -1,55 +0,0 @@
-package xyz.driver.pdsuidomain.entities
-
-import xyz.driver.pdsuicommon.domain.{LongId, StringId}
-import xyz.driver.pdsuicommon.logging._
-import xyz.driver.pdsuidomain.entities.Criterion.Meta.Evidence
-
-final case class Criterion(id: LongId[Criterion],
- trialId: StringId[Trial],
- text: Option[String],
- isCompound: Boolean,
- meta: String) {
-
- def isValid(): Boolean = text.nonEmpty && Option(meta).isDefined
-}
-
-object Criterion {
-
- final case class Meta(evidence: Evidence)
-
- object Meta {
- final case class Evidence(pageRatio: Double, start: TextLayerPosition, end: TextLayerPosition)
- final case class TextLayerPosition(page: Integer, index: Integer, offset: Integer)
- }
-
- implicit def toPhiString(x: Criterion): PhiString = {
- import x._
- phi"Criterion(id=$id, trialId=$trialId, isCompound=$isCompound)"
- }
-}
-
-final case class CriterionArm(criterionId: LongId[Criterion], armId: LongId[Arm])
-
-object CriterionArm {
-
- implicit def toPhiString(x: CriterionArm): PhiString = {
- import x._
- phi"CriterionArm(criterionId=$criterionId, armId=$armId)"
- }
-}
-
-final case class CriterionLabel(id: LongId[CriterionLabel],
- labelId: Option[LongId[Label]],
- criterionId: LongId[Criterion],
- categoryId: Option[LongId[Category]],
- value: Option[Boolean],
- isDefining: Boolean)
-
-object CriterionLabel {
-
- implicit def toPhiString(x: CriterionLabel): PhiString = {
- import x._
- phi"CriterionLabel(id=$id, labelId=$labelId, criterionId=$criterionId, " +
- phi"categoryId=$categoryId, value=$value, isDefining=$isDefining)"
- }
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/DirectReport.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/DirectReport.scala
deleted file mode 100644
index 42ac55b..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/DirectReport.scala
+++ /dev/null
@@ -1,41 +0,0 @@
-package xyz.driver.pdsuidomain.entities
-
-import java.time.LocalDate
-
-import xyz.driver.pdsuicommon.logging._
-import xyz.driver.pdsuicommon.domain.UuidId
-import xyz.driver.pdsuicommon.utils.Utils
-import xyz.driver.pdsuidomain.entities.DirectReport.ReportType
-
-object DirectReport {
-
- sealed trait ReportType extends Product with Serializable {
- def oneOf(xs: ReportType*): Boolean = xs.contains(this)
-
- def oneOf(xs: Set[ReportType]): Boolean = xs.contains(this)
- }
-
- object ReportType {
- case object IHC extends ReportType
- case object DNA extends ReportType
- case object CFDNA extends ReportType
-
- val All = Set(IHC, DNA, CFDNA)
- implicit def toPhiString(x: ReportType): PhiString = Unsafe(Utils.getClassSimpleName(x.getClass))
- }
-
- implicit def toPhiString(x: DirectReport): PhiString = {
- import x._
- phi"DirectReport(id=$id, patientId=$patientId, reportType=$reportType, date=${Unsafe(date)}, " +
- phi"documentType=${Unsafe(documentType)}, providerType=${Unsafe(providerType)}, " +
- phi"providerName=${Unsafe(providerName)})"
- }
-}
-
-final case class DirectReport(id: UuidId[DirectReport],
- patientId: UuidId[Patient],
- reportType: ReportType,
- date: LocalDate,
- documentType: String,
- providerType: String,
- providerName: String)
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/Document.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/Document.scala
deleted file mode 100644
index 1f73184..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/Document.scala
+++ /dev/null
@@ -1,317 +0,0 @@
-package xyz.driver.pdsuidomain.entities
-
-import java.time.{LocalDate, LocalDateTime, ZoneId}
-
-import com.fasterxml.jackson.annotation.JsonIgnoreProperties
-import com.fasterxml.jackson.core.{JsonGenerator, JsonParser}
-import com.fasterxml.jackson.databind._
-import com.fasterxml.jackson.databind.annotation.{JsonDeserialize, JsonSerialize}
-import xyz.driver.pdsuicommon.compat.Implicits._
-import xyz.driver.pdsuicommon.domain._
-import xyz.driver.pdsuicommon.logging._
-import xyz.driver.pdsuicommon.utils.Utils
-import xyz.driver.pdsuicommon.validation.Validators
-import xyz.driver.pdsuicommon.validation.Validators.Validator
-import xyz.driver.pdsuidomain.entities.Document.Meta
-
-final case class ProviderType(id: LongId[ProviderType], name: String)
-
-object ProviderType {
- sealed trait ProviderTypeName
- case object MedicalOncology extends ProviderTypeName
- case object Surgery extends ProviderTypeName
- case object Pathology extends ProviderTypeName
- case object MolecularPathology extends ProviderTypeName
- case object LaboratoryMedicine extends ProviderTypeName
- case object Radiology extends ProviderTypeName
- case object InterventionalRadiology extends ProviderTypeName
- case object RadiationOncology extends ProviderTypeName
- case object PrimaryCare extends ProviderTypeName
- case object Cardiology extends ProviderTypeName
- case object Dermatology extends ProviderTypeName
- case object Ophthalmology extends ProviderTypeName
- case object Gastroenterology extends ProviderTypeName
- case object Neurology extends ProviderTypeName
- case object Psychiatry extends ProviderTypeName
- case object Gynecology extends ProviderTypeName
- case object InfectiousDisease extends ProviderTypeName
- case object Immunology extends ProviderTypeName
- case object Nephrology extends ProviderTypeName
- case object Rheumatology extends ProviderTypeName
- case object Cytology extends ProviderTypeName
- case object Otolaryngology extends ProviderTypeName
- case object Anesthesiology extends ProviderTypeName
- case object Urology extends ProviderTypeName
- case object PalliativeCare extends ProviderTypeName
- case object EmergencyMedicine extends ProviderTypeName
- case object SocialWork extends ProviderTypeName
- case object NA extends ProviderTypeName
- case object Other extends ProviderTypeName
-
- def fromString(txt: String): Option[ProviderTypeName] = {
- txt match {
- case "Medical Oncology" => Some(MedicalOncology)
- case "Surgery" => Some(Surgery)
- case "Pathology" => Some(Pathology)
- case "Molecular Pathology" => Some(MolecularPathology)
- case "LaboratoryMedicine" => Some(LaboratoryMedicine)
- case "Radiology" => Some(Radiology)
- case "Interventional Radiology" => Some(InterventionalRadiology)
- case "Radiation Oncology" => Some(RadiationOncology)
- case "Primary Care" => Some(PrimaryCare)
- case "Cardiology" => Some(Cardiology)
- case "Dermatology" => Some(Dermatology)
- case "Ophthalmology" => Some(Ophthalmology)
- case "Gastroenterology" => Some(Gastroenterology)
- case "Neurology" => Some(Neurology)
- case "Psychiatry" => Some(Psychiatry)
- case "Gynecology" => Some(Gynecology)
- case "Infectious Disease" => Some(InfectiousDisease)
- case "Immunology" => Some(Immunology)
- case "Nephrology" => Some(Nephrology)
- case "Rheumatology" => Some(Rheumatology)
- case "Cytology" => Some(Cytology)
- case "Otolaryngology" => Some(Otolaryngology)
- case "Anesthesiology" => Some(Anesthesiology)
- case "Urology" => Some(Urology)
- case "Palliative Care" => Some(PalliativeCare)
- case "Emergency Medicine" => Some(EmergencyMedicine)
- case "Social Work" => Some(SocialWork)
- case "N/A" => Some(NA)
- case "Other" => Some(Other)
- case _ => None
- }
- }
-
- implicit def toPhiString(x: ProviderType): PhiString = {
- import x._
- phi"ProviderType(id=$id, category=${Unsafe(name)})"
- }
-}
-
-final case class DocumentType(id: LongId[DocumentType], name: String)
-
-object DocumentType {
- sealed trait DocumentTypeName
- case object OutpatientPhysicianNote extends DocumentTypeName
- case object DischargeNote extends DocumentTypeName
- case object LaboratoryReport extends DocumentTypeName
- case object MedicationList extends DocumentTypeName
- case object HospitalizationNote extends DocumentTypeName
- case object PathologyReport extends DocumentTypeName
- case object RadiologyReport extends DocumentTypeName
- case object OperativeProcedureReport extends DocumentTypeName
- case object MedicationAdministration extends DocumentTypeName
- case object SocialWorkCaseManagementNote extends DocumentTypeName
- case object NonPhysicianProviderNote extends DocumentTypeName
- case object Administrative extends DocumentTypeName
-
- def fromString(txt: String): Option[DocumentTypeName] = {
- txt match {
- case "Outpatient Physician Note" => Some(OutpatientPhysicianNote)
- case "Discharge Note" => Some(DischargeNote)
- case "Laboratory Report" => Some(LaboratoryReport)
- case "Medication List" => Some(MedicationList)
- case "Hospitalization Note" => Some(HospitalizationNote)
- case "Pathology Report" => Some(PathologyReport)
- case "Radiology Report" => Some(RadiologyReport)
- case "Operative/Procedure Report" => Some(OperativeProcedureReport)
- case "Medication Administration" => Some(MedicationAdministration)
- case "Social Work/Case Management Note" => Some(SocialWorkCaseManagementNote)
- case "Non-physician Provider Note" => Some(NonPhysicianProviderNote)
- case "Administrative" => Some(Administrative)
- case _ => None
- }
- }
-
- implicit def toPhiString(x: DocumentType): PhiString = {
- import x._
- phi"DocumentType(id=$id, name=${Unsafe(name)})"
- }
-}
-
-object Document {
-
- final case class Meta(predicted: Option[Boolean], startPage: Double, endPage: Double) {
-
- /**
- * Return a regular meta: this meta is considered as not predicted
- */
- def confirmed: Meta = copy(predicted = predicted.map(_ => false))
- }
-
- class DocumentStatusSerializer extends JsonSerializer[Status] {
- def serialize(value: Status, gen: JsonGenerator, serializers: SerializerProvider): Unit = {
- gen.writeString(value.toString.toUpperCase)
- }
- }
-
- class DocumentStatusDeserializer extends JsonDeserializer[Status] {
- def deserialize(parser: JsonParser, context: DeserializationContext): Status = {
- val value = parser.getValueAsString
- Option(value).fold[Document.Status](Status.New /* Default document status */ ) { v =>
- Status.All.find(_.toString.toUpperCase == v) match {
- case None => throw new RuntimeJsonMappingException(s"$v is not valid Document.Status")
- case Some(status) => status
- }
- }
- }
- }
-
- // Product with Serializable fixes issue:
- // Set(New, Organized) has type Set[Status with Product with Serializable]
- @JsonDeserialize(using = classOf[DocumentStatusDeserializer])
- @JsonSerialize(using = classOf[DocumentStatusSerializer])
- sealed trait Status extends Product with Serializable {
-
- def oneOf(xs: Status*): Boolean = xs.contains(this)
-
- def oneOf(xs: Set[Status]): Boolean = xs.contains(this)
-
- }
-
- object Status {
- case object New extends Status
- case object Organized extends Status
- case object Extracted extends Status
- case object Done extends Status
- case object Flagged extends Status
- case object Archived extends Status
-
- val All = Set[Status](New, Organized, Extracted, Done, Flagged, Archived)
- val AllPrevious = Set[Status](Organized, Extracted)
-
- def fromString(status: String): Option[Status] = status match {
- case "New" => Some(Status.New)
- case "Organized" => Some(Status.Organized)
- case "Extracted" => Some(Status.Extracted)
- case "Done" => Some(Status.Done)
- case "Flagged" => Some(Status.Flagged)
- case "Archived" => Some(Status.Archived)
- case _ => None
- }
-
- def statusToString(x: Status): String = x match {
- case Status.New => "New"
- case Status.Organized => "Organized"
- case Status.Extracted => "Extracted"
- case Status.Done => "Done"
- case Status.Flagged => "Flagged"
- case Status.Archived => "Archived"
- }
-
- implicit def toPhiString(x: Status): PhiString = Unsafe(Utils.getClassSimpleName(x.getClass))
- }
-
- sealed trait RequiredType extends Product with Serializable {
-
- def oneOf(xs: RequiredType*): Boolean = xs.contains(this)
-
- def oneOf(xs: Set[RequiredType]): Boolean = xs.contains(this)
-
- }
-
- object RequiredType {
- case object OPN extends RequiredType
- case object PN extends RequiredType
-
- val All = Set[RequiredType](OPN, PN)
-
- def fromString(tpe: String): Option[RequiredType] = tpe match {
- case "OPN" => Some(RequiredType.OPN)
- case "PN" => Some(RequiredType.PN)
- case _ => None
- }
-
- def requiredTypeToString(x: RequiredType): String = x match {
- case RequiredType.OPN => "OPN"
- case RequiredType.PN => "PN"
- }
-
- implicit def toPhiString(x: RequiredType): PhiString = Unsafe(Utils.getClassSimpleName(x.getClass))
- }
-
- implicit def toPhiString(x: Document): PhiString = {
- import x._
- phi"Document(id=$id, status=$status, assignee=$assignee, " +
- phi"previousAssignee=$previousAssignee, lastActiveUserId=$lastActiveUserId, recordId=$recordId)"
- }
-
- val validator: Validator[Document, Document] = { input =>
- for {
- typeId <- Validators.nonEmpty("typeId")(input.typeId)
-
- providerTypeId <- Validators.nonEmpty("providerTypeId")(input.providerTypeId)
-
- meta <- Validators.nonEmpty("meta")(input.meta)
-
- startDate <- Validators.nonEmpty("startDate")(input.startDate)
-
- isOrderRight <- input.endDate match {
- case Some(endDate) if startDate.isAfter(endDate) =>
- Validators.fail("The start date should be less, than the end one")
-
- case _ => Validators.success(true)
- }
-
- areDatesInThePast <- {
- val dates = List(input.startDate, input.endDate).flatten
- val now = LocalDate.now()
- val hasInvalid = dates.exists(_.isAfter(now))
-
- if (hasInvalid) Validators.fail("Dates should be in the past")
- else Validators.success(true)
- }
- } yield input
- }
-
-}
-
-@JsonIgnoreProperties(value = Array("valid"))
-final case class Document(id: LongId[Document] = LongId(0L),
- status: Document.Status,
- previousStatus: Option[Document.Status],
- assignee: Option[StringId[User]],
- previousAssignee: Option[StringId[User]],
- lastActiveUserId: Option[StringId[User]],
- recordId: LongId[MedicalRecord],
- physician: Option[String],
- typeId: Option[LongId[DocumentType]], // not null
- providerName: Option[String], // not null
- providerTypeId: Option[LongId[ProviderType]], // not null
- requiredType: Option[Document.RequiredType],
- meta: Option[TextJson[Meta]], // not null
- startDate: Option[LocalDate], // not null
- endDate: Option[LocalDate],
- lastUpdate: LocalDateTime) {
-
- import Document.Status._
-
- if (previousStatus.nonEmpty) {
- assert(AllPrevious.contains(previousStatus.get), s"Previous status has invalid value: ${previousStatus.get}")
- }
-
- def getRequiredType(documentTypeName: String, providerTypeName: String): Option[Document.RequiredType] = {
- import DocumentType.{OutpatientPhysicianNote, PathologyReport}
- import ProviderType.MedicalOncology
-
- (DocumentType.fromString(documentTypeName), ProviderType.fromString(providerTypeName), startDate) match {
- case (Some(OutpatientPhysicianNote), Some(MedicalOncology), Some(date))
- if !(date.isAfter(LocalDate.now(ZoneId.of("Z"))) || date.isBefore(
- LocalDate.now(ZoneId.of("Z")).minusMonths(6))) =>
- Some(Document.RequiredType.OPN)
-
- case (Some(PathologyReport), _, _) => Some(Document.RequiredType.PN)
-
- case _ => None
- }
- }
-
- // TODO: with the current business logic code this constraint sometimes harmful
- // require(status match {
- // case Document.Status.New if assignee.isDefined => false
- // case Document.Status.Done if assignee.isDefined => false
- // case _ => true
- // }, "Assignee can't be defined in New or Done statuses")
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/DocumentHistory.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/DocumentHistory.scala
deleted file mode 100644
index a82da12..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/DocumentHistory.scala
+++ /dev/null
@@ -1,90 +0,0 @@
-package xyz.driver.pdsuidomain.entities
-
-import java.time.{LocalDateTime, ZoneId}
-
-import xyz.driver.pdsuicommon.domain._
-import xyz.driver.pdsuicommon.logging._
-import xyz.driver.pdsuicommon.utils.Utils
-import xyz.driver.pdsuidomain.entities.DocumentHistory._
-
-object DocumentHistory {
-
- implicit def toPhiString(x: DocumentHistory): PhiString = {
- import x._
- phi"DocumentHistory(id=$id, executor=$executor, documentId=$documentId, state=$state, action=$action, " +
- phi"created=$created)"
- }
-
- sealed trait State
- object State {
- case object Extract extends State
- case object Review extends State
- case object Flag extends State
-
- val All: Set[State] = Set[State](Extract, Review, Flag)
-
- val fromString: PartialFunction[String, State] = {
- case "Extract" => State.Extract
- case "Review" => State.Review
- case "Flag" => State.Flag
- }
-
- def stateToString(x: State): String = x match {
- case State.Extract => "Extract"
- case State.Review => "Review"
- case State.Flag => "Flag"
- }
-
- implicit def toPhiString(x: State): PhiString =
- Unsafe(Utils.getClassSimpleName(x.getClass))
- }
-
- sealed trait Action extends Product with Serializable {
-
- def oneOf(xs: Action*): Boolean = xs.contains(this)
-
- def oneOf(xs: Set[Action]): Boolean = xs.contains(this)
-
- }
-
- object Action {
- case object Start extends Action
- case object Submit extends Action
- case object Unassign extends Action
- case object Resolve extends Action
- case object Flag extends Action
- case object Archive extends Action
-
- val All: Set[Action] =
- Set[Action](Start, Submit, Unassign, Resolve, Flag, Archive)
-
- val fromString: PartialFunction[String, Action] = {
- case "Start" => Action.Start
- case "Submit" => Action.Submit
- case "Unassign" => Action.Unassign
- case "Resolve" => Action.Resolve
- case "Flag" => Action.Flag
- case "Archive" => Action.Archive
- }
-
- def actionToString(x: Action): String = x match {
- case Action.Start => "Start"
- case Action.Submit => "Submit"
- case Action.Unassign => "Unassign"
- case Action.Resolve => "Resolve"
- case Action.Flag => "Flag"
- case Action.Archive => "Archive"
- }
-
- implicit def toPhiString(x: Action): PhiString =
- Unsafe(Utils.getClassSimpleName(x.getClass))
- }
-
-}
-
-final case class DocumentHistory(id: LongId[DocumentHistory],
- executor: StringId[User],
- documentId: LongId[Document],
- state: State,
- action: Action,
- created: LocalDateTime = LocalDateTime.now(ZoneId.of("Z")))
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/DocumentIssue.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/DocumentIssue.scala
deleted file mode 100644
index 0ec8b00..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/DocumentIssue.scala
+++ /dev/null
@@ -1,23 +0,0 @@
-package xyz.driver.pdsuidomain.entities
-
-import java.time.LocalDateTime
-
-import xyz.driver.pdsuicommon.domain.{LongId, StringId, User}
-import xyz.driver.pdsuicommon.logging._
-
-final case class DocumentIssue(id: LongId[DocumentIssue],
- userId: StringId[User],
- documentId: LongId[Document],
- startPage: Option[Double],
- endPage: Option[Double],
- lastUpdate: LocalDateTime,
- isDraft: Boolean,
- text: String,
- archiveRequired: Boolean)
-
-object DocumentIssue {
- implicit def toPhiString(x: DocumentIssue): PhiString = {
- import x._
- phi"DocumentIssue(id=$id, userId=$userId, documentId=$documentId)"
- }
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/ExtractedData.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/ExtractedData.scala
deleted file mode 100644
index 32258dc..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/ExtractedData.scala
+++ /dev/null
@@ -1,47 +0,0 @@
-package xyz.driver.pdsuidomain.entities
-
-import xyz.driver.pdsuicommon.domain.{FuzzyValue, LongId, TextJson}
-import xyz.driver.pdsuicommon.logging._
-import xyz.driver.pdsuidomain.entities.ExtractedData.Meta
-
-final case class ExtractedData(id: LongId[ExtractedData] = LongId(0L),
- documentId: LongId[Document],
- keywordId: Option[LongId[Keyword]],
- evidenceText: Option[String],
- meta: Option[TextJson[Meta]]) {
-
- def isValid: Boolean = evidenceText.getOrElse("") != "" && meta.nonEmpty
-
-}
-
-object ExtractedData {
-
- final case class Meta(keyword: Meta.Keyword, evidence: Meta.Evidence)
-
- object Meta {
- final case class Evidence(pageRatio: Double, start: TextLayerPosition, end: TextLayerPosition)
-
- final case class TextLayerPosition(page: Integer, index: Integer, offset: Integer)
-
- final case class Keyword(page: Integer, pageRatio: Option[Double], index: Integer, sortIndex: String)
- }
-
- implicit def toPhiString(x: ExtractedData): PhiString = {
- import x._
- phi"ExtractedData(id=$id, documentId=$documentId, keywordId=$keywordId)"
- }
-}
-
-object ExtractedDataLabel {
-
- implicit def toPhiString(x: ExtractedDataLabel): PhiString = {
- import x._
- phi"ExtractedDataLabel(id=$id, dataId=$dataId, labelId=$labelId, categoryId=$categoryId, value=$value)"
- }
-}
-
-final case class ExtractedDataLabel(id: LongId[ExtractedDataLabel],
- dataId: LongId[ExtractedData],
- labelId: Option[LongId[Label]],
- categoryId: Option[LongId[Category]],
- value: Option[FuzzyValue])
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/Hypothesis.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/Hypothesis.scala
deleted file mode 100644
index 47b87ff..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/Hypothesis.scala
+++ /dev/null
@@ -1,13 +0,0 @@
-package xyz.driver.pdsuidomain.entities
-
-import xyz.driver.pdsuicommon.domain.UuidId
-import xyz.driver.pdsuicommon.logging._
-
-final case class Hypothesis(id: UuidId[Hypothesis], name: String, treatmentType: String, description: String)
-
-object Hypothesis {
- implicit def toPhiString(x: Hypothesis): PhiString = {
- import x._
- phi"Hypothesis(id=$id, name=${Unsafe(name)})"
- }
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/Intervention.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/Intervention.scala
deleted file mode 100644
index e691547..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/Intervention.scala
+++ /dev/null
@@ -1,48 +0,0 @@
-package xyz.driver.pdsuidomain.entities
-
-import xyz.driver.pdsuicommon.domain.{LongId, StringId}
-import xyz.driver.pdsuicommon.logging._
-
-final case class InterventionType(id: LongId[InterventionType], name: String)
-
-object InterventionType {
- implicit def toPhiString(x: InterventionType): PhiString = {
- import x._
- phi"InterventionType(id=$id, name=${Unsafe(name)})"
- }
-}
-
-final case class InterventionArm(armId: LongId[Arm], interventionId: LongId[Intervention])
-
-object InterventionArm {
- implicit def toPhiString(x: InterventionArm): PhiString = {
- import x._
- phi"InterventionArm(armId=$armId, interventionId=$interventionId)"
- }
-}
-
-final case class Intervention(id: LongId[Intervention],
- trialId: StringId[Trial],
- name: String,
- originalName: String,
- typeId: Option[LongId[InterventionType]],
- originalType: Option[String],
- description: String,
- originalDescription: String,
- isActive: Boolean)
-
-object Intervention {
- implicit def toPhiString(x: Intervention): PhiString = {
- import x._
- phi"Intervention(id=$id, trialId=$trialId, name=${Unsafe(name)}, typeId=$typeId, isActive=$isActive)"
- }
-}
-
-final case class InterventionWithArms(intervention: Intervention, arms: List[InterventionArm])
-
-object InterventionWithArms {
- implicit def toPhiString(x: InterventionWithArms): PhiString = {
- import x._
- phi"InterventionWithArms(intervention=$intervention, arms=$arms)"
- }
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/Keyword.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/Keyword.scala
deleted file mode 100644
index 3683efc..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/Keyword.scala
+++ /dev/null
@@ -1,31 +0,0 @@
-package xyz.driver.pdsuidomain.entities
-
-import xyz.driver.pdsuicommon.domain.LongId
-import xyz.driver.pdsuicommon.logging._
-
-final case class Keyword(id: LongId[Keyword], keyword: String)
-
-object Keyword {
- implicit def toPhiString(x: Keyword): PhiString = {
- import x._
- phi"Keyword(id=$id, keyword=${Unsafe(keyword)})"
- }
-}
-
-final case class KeywordWithLabels(keyword: Keyword, labels: List[Label])
-
-object KeywordWithLabels {
- implicit def toPhiString(x: KeywordWithLabels): PhiString = {
- import x._
- phi"KeywordWithLabels(keyword=$keyword, $labels)"
- }
-}
-
-final case class KeywordLabel(keywordId: LongId[Keyword], labelId: LongId[Label])
-
-object KeywordLabel {
- implicit def toPhiString(x: KeywordLabel): PhiString = {
- import x._
- phi"KeywordLabel($keywordId, $labelId)"
- }
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/Label.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/Label.scala
deleted file mode 100644
index eea39de..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/Label.scala
+++ /dev/null
@@ -1,31 +0,0 @@
-package xyz.driver.pdsuidomain.entities
-
-import xyz.driver.pdsuicommon.domain.LongId
-import xyz.driver.pdsuicommon.logging._
-
-final case class Category(id: LongId[Category], name: String)
-
-object Category {
- implicit def toPhiString(x: Category): PhiString = {
- import x._
- phi"Category(id=$id, name=${Unsafe(name)})"
- }
-}
-
-final case class Label(id: LongId[Label], categoryId: LongId[Category], name: String, description: String)
-
-object Label {
- implicit def toPhiString(x: Label): PhiString = {
- import x._
- phi"Label($id, categoryId=${Unsafe(categoryId)}, name=${Unsafe(name)}, description=${Unsafe(description)})"
- }
-}
-
-final case class CategoryWithLabels(category: Category, labels: List[Label])
-
-object CategoryWithLabels {
- implicit def toPhiString(x: CategoryWithLabels): PhiString = {
- import x._
- phi"CategoryWithLabels(category=$category, labels=$labels)"
- }
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/MedicalRecord.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/MedicalRecord.scala
deleted file mode 100644
index 9b33af4..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/MedicalRecord.scala
+++ /dev/null
@@ -1,184 +0,0 @@
-package xyz.driver.pdsuidomain.entities
-
-import java.nio.channels.ReadableByteChannel
-import java.time.LocalDateTime
-
-import com.fasterxml.jackson.annotation.JsonSubTypes.Type
-import com.fasterxml.jackson.annotation.{JsonProperty, JsonSubTypes, JsonTypeInfo}
-import xyz.driver.pdsuicommon.domain._
-import xyz.driver.pdsuicommon.logging._
-import xyz.driver.pdsuicommon.utils.Utils
-import xyz.driver.pdsuidomain.entities.MedicalRecord.Meta
-import xyz.driver.pdsuidomain.entities.MedicalRecord.Meta.{Duplicate, Reorder, Rotation}
-
-object MedicalRecord {
-
- @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type")
- @JsonSubTypes(
- Array(
- new Type(value = classOf[Duplicate], name = "duplicate"),
- new Type(value = classOf[Reorder], name = "reorder"),
- new Type(value = classOf[Rotation], name = "rotation")
- ))
- trait Meta {
- @JsonProperty("type") def metaType: String
- def predicted: Option[Boolean]
-
- /**
- * Return a regular meta: this meta is considered as not predicted
- */
- def confirmed: Meta
- }
-
- object Meta {
-
- final case class Duplicate(predicted: Option[Boolean],
- startPage: Double,
- endPage: Double,
- startOriginalPage: Double,
- endOriginalPage: Option[Double])
- extends Meta {
- override val metaType = "duplicate"
- override def confirmed: Duplicate = copy(predicted = predicted.map(_ => false))
- }
-
- object Duplicate {
- implicit def toPhiString(x: Duplicate): PhiString = {
- import x._
- phi"Duplicate(predicted=${x.predicted}, startPage=${Unsafe(startPage)}, endPage=${Unsafe(endPage)}, " +
- phi"startOriginalPage=${Unsafe(startOriginalPage)}, endOriginalPage=${Unsafe(endOriginalPage)}"
- }
- }
-
- final case class Reorder(predicted: Option[Boolean], items: Seq[Int]) extends Meta {
- override val metaType = "reorder"
- override def confirmed: Reorder = copy(predicted = predicted.map(_ => false))
- }
-
- object Reorder {
- implicit def toPhiString(x: Reorder): PhiString = {
- import x._
- phi"Reorder(predicted=${x.predicted}, items=${Unsafe(items.toString)})"
- }
- }
-
- final case class Rotation(predicted: Option[Boolean], items: Map[String, Int]) extends Meta {
- override val metaType = "rotation"
- override def confirmed: Rotation = copy(predicted = predicted.map(_ => false))
- }
-
- object Rotation {
- implicit def toPhiString(x: Rotation): PhiString = {
- import x._
- phi"Rotation(predicted=${x.predicted}, items=${Unsafe(items.toString)})"
- }
- }
-
- implicit def toPhiString(input: Meta): PhiString = input match {
- case x: Duplicate => Duplicate.toPhiString(x)
- case x: Reorder => Reorder.toPhiString(x)
- case x: Rotation => Rotation.toPhiString(x)
- }
-
- }
-
- // Product with Serializable fixes issue:
- // Set(New, Cleaned) has type Set[Status with Product with Serializable]
- sealed trait Status extends Product with Serializable {
-
- def oneOf(xs: Status*): Boolean = xs.contains(this)
-
- def oneOf(xs: Set[Status]): Boolean = xs.contains(this)
-
- }
- object Status {
- case object Unprocessed extends Status
- case object PreCleaning extends Status
- case object New extends Status
- case object Cleaned extends Status
- case object PreOrganized extends Status
- case object PreOrganizing extends Status
- case object Reviewed extends Status
- case object Organized extends Status
- case object Done extends Status
- case object Flagged extends Status
- case object Archived extends Status
-
- def fromString(status: String): Option[Status] = status match {
- case "Unprocessed" => Some(Unprocessed)
- case "PreCleaning" => Some(PreCleaning)
- case "New" => Some(New)
- case "Cleaned" => Some(Cleaned)
- case "PreOrganized" => Some(PreOrganized)
- case "PreOrganizing" => Some(PreOrganizing)
- case "Reviewed" => Some(Reviewed)
- case "Organized" => Some(Organized)
- case "Done" => Some(Done)
- case "Flagged" => Some(Flagged)
- case "Archived" => Some(Archived)
- case _ => None
- }
-
- val All = Set[Status](
- Unprocessed,
- PreCleaning,
- New,
- Cleaned,
- PreOrganized,
- PreOrganizing,
- Reviewed,
- Organized,
- Done,
- Flagged,
- Archived
- )
-
- val AllPrevious = Set[Status](New, Cleaned, Reviewed, Organized)
-
- implicit def toPhiString(x: Status): PhiString = Unsafe(Utils.getClassSimpleName(x.getClass))
- }
-
- sealed trait PdfSource
-
- object PdfSource {
- case object Empty extends PdfSource
-
- /** @param createResource Constructor of the resource which is represents the file */
- final case class Channel(createResource: () => ReadableByteChannel) extends PdfSource
- }
-
- implicit def toPhiString(x: MedicalRecord): PhiString = {
- import x._
- phi"MedicalRecord(id=$id, status=$status, assignee=$assignee, " +
- phi"previousAssignee=$previousAssignee, lastActiveUserId=$lastActiveUserId)"
- }
-}
-
-final case class MedicalRecord(id: LongId[MedicalRecord],
- status: MedicalRecord.Status,
- previousStatus: Option[MedicalRecord.Status],
- assignee: Option[StringId[User]],
- previousAssignee: Option[StringId[User]],
- lastActiveUserId: Option[StringId[User]],
- patientId: UuidId[Patient],
- requestId: RecordRequestId,
- disease: String,
- caseId: Option[CaseId],
- physician: Option[String],
- meta: Option[TextJson[List[Meta]]],
- predictedMeta: Option[TextJson[List[Meta]]],
- predictedDocuments: Option[TextJson[List[Document]]],
- lastUpdate: LocalDateTime) {
-
- import MedicalRecord.Status._
-
- if (previousStatus.nonEmpty) {
- assert(AllPrevious.contains(previousStatus.get), s"Previous status has invalid value: ${previousStatus.get}")
- }
-
- // TODO: with the current business logic code this constraint sometimes harmful
- // require(status match {
- // case MedicalRecord.Status.Done if assignee.isDefined => false
- // case _ => true
- // }, "Assignee can't be defined in Done status")
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/MedicalRecordHistory.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/MedicalRecordHistory.scala
deleted file mode 100644
index d01433c..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/MedicalRecordHistory.scala
+++ /dev/null
@@ -1,93 +0,0 @@
-package xyz.driver.pdsuidomain.entities
-
-import java.time.{LocalDateTime, ZoneId}
-
-import xyz.driver.pdsuicommon.domain._
-import xyz.driver.pdsuicommon.logging._
-import xyz.driver.pdsuicommon.utils.Utils
-import xyz.driver.pdsuidomain.entities.MedicalRecordHistory._
-
-object MedicalRecordHistory {
-
- implicit def toPhiString(x: MedicalRecordHistory): PhiString = {
- import x._
- phi"MedicalRecordHistory(id=$id, executor=$executor, recordId=$recordId, state=$state, action=$action, " +
- phi"created=$created)"
- }
-
- sealed trait State
- object State {
- case object Clean extends State
- case object Organize extends State
- case object Review extends State
- case object Flag extends State
-
- val All: Set[State] = Set[State](Clean, Organize, Review, Flag)
-
- val fromString: PartialFunction[String, State] = {
- case "Clean" => State.Clean
- case "Organize" => State.Organize
- case "Review" => State.Review
- case "Flag" => State.Flag
- }
-
- def stateToString(x: State): String = x match {
- case State.Clean => "Clean"
- case State.Organize => "Organize"
- case State.Review => "Review"
- case State.Flag => "Flag"
- }
-
- implicit def toPhiString(x: State): PhiString =
- Unsafe(Utils.getClassSimpleName(x.getClass))
- }
-
- sealed trait Action extends Product with Serializable {
-
- def oneOf(xs: Action*): Boolean = xs.contains(this)
-
- def oneOf(xs: Set[Action]): Boolean = xs.contains(this)
-
- }
-
- object Action {
- case object Start extends Action
- case object Submit extends Action
- case object Unassign extends Action
- case object Resolve extends Action
- case object Flag extends Action
- case object Archive extends Action
-
- val All: Set[Action] =
- Set[Action](Start, Submit, Unassign, Resolve, Flag, Archive)
-
- val fromString: PartialFunction[String, Action] = {
- case "Start" => Action.Start
- case "Submit" => Action.Submit
- case "Unassign" => Action.Unassign
- case "Resolve" => Action.Resolve
- case "Flag" => Action.Flag
- case "Archive" => Action.Archive
- }
-
- def actionToString(x: Action): String = x match {
- case Action.Start => "Start"
- case Action.Submit => "Submit"
- case Action.Unassign => "Unassign"
- case Action.Resolve => "Resolve"
- case Action.Flag => "Flag"
- case Action.Archive => "Archive"
- }
-
- implicit def toPhiString(x: Action): PhiString =
- Unsafe(Utils.getClassSimpleName(x.getClass))
- }
-
-}
-
-final case class MedicalRecordHistory(id: LongId[MedicalRecordHistory],
- executor: StringId[User],
- recordId: LongId[MedicalRecord],
- state: State,
- action: Action,
- created: LocalDateTime = LocalDateTime.now(ZoneId.of("Z")))
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/MedicalRecordIssue.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/MedicalRecordIssue.scala
deleted file mode 100644
index 0d5a498..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/MedicalRecordIssue.scala
+++ /dev/null
@@ -1,23 +0,0 @@
-package xyz.driver.pdsuidomain.entities
-
-import java.time.LocalDateTime
-
-import xyz.driver.pdsuicommon.domain.{LongId, StringId, User}
-import xyz.driver.pdsuicommon.logging._
-
-final case class MedicalRecordIssue(id: LongId[MedicalRecordIssue],
- userId: StringId[User],
- recordId: LongId[MedicalRecord],
- startPage: Option[Double],
- endPage: Option[Double],
- lastUpdate: LocalDateTime,
- isDraft: Boolean,
- text: String,
- archiveRequired: Boolean)
-
-object MedicalRecordIssue {
- implicit def toPhiString(x: MedicalRecordIssue): PhiString = {
- import x._
- phi"MedicalRecordIssue(id=$id, userId=$userId, recordId=$recordId)"
- }
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/Message.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/Message.scala
deleted file mode 100644
index 3bdbac8..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/Message.scala
+++ /dev/null
@@ -1,34 +0,0 @@
-package xyz.driver.pdsuidomain.entities
-
-import java.time.LocalDateTime
-
-import xyz.driver.pdsuicommon.domain.{LongId, StringId, User, UuidId}
-import xyz.driver.pdsuicommon.logging._
-
-final case class Message(id: LongId[Message],
- text: String,
- lastUpdate: LocalDateTime,
- userId: StringId[User],
- isDraft: Boolean,
- recordId: Option[LongId[MedicalRecord]],
- documentId: Option[LongId[Document]],
- patientId: Option[UuidId[Patient]],
- trialId: Option[StringId[Trial]],
- startPage: Option[Double],
- endPage: Option[Double],
- evidence: Option[String],
- archiveRequired: Option[Boolean],
- meta: Option[String])
-
-object Message {
- implicit def toPhiString(x: Message): PhiString = {
- import x._
-
- val entityId: Option[String] = recordId
- .map(_.toString)
- .orElse(documentId.map(_.toString))
- .orElse(patientId.map(_.toString))
-
- phi"Message(id=$id, userId=$userId, isDraft=$isDraft, entityId=${Unsafe(entityId)}"
- }
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/Patient.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/Patient.scala
deleted file mode 100644
index 6be0b88..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/Patient.scala
+++ /dev/null
@@ -1,71 +0,0 @@
-package xyz.driver.pdsuidomain.entities
-
-import java.time.{LocalDate, LocalDateTime}
-
-import xyz.driver.pdsuicommon.domain._
-import xyz.driver.pdsuicommon.logging._
-import xyz.driver.pdsuicommon.utils.Utils
-
-object Patient {
-
- // Product with Serizalizable fixes issue:
- // Set(New, Verified) has type Set[Status with Product with Serializable]
- sealed trait Status extends Product with Serializable {
- def oneOf(xs: Status*): Boolean = xs.contains(this)
-
- def oneOf(xs: Set[Status]): Boolean = xs.contains(this)
- }
-
- object Status {
- case object New extends Status
- case object Verified extends Status
- case object Reviewed extends Status
- case object Curated extends Status
- case object Flagged extends Status
- case object Done extends Status
-
- val AllPrevious = Set[Status](
- New,
- Verified,
- Reviewed,
- Curated
- )
-
- val All = Set[Status](
- New,
- Verified,
- Reviewed,
- Curated,
- Flagged,
- Done
- )
-
- implicit def toPhiString(x: Status): PhiString = Unsafe(Utils.getClassSimpleName(x.getClass))
- }
-
- implicit def toPhiString(x: Patient): PhiString = {
- import x._
- phi"Patient(id=$id, status=$status, previousStatus=$previousStatus, lastActiveUserId=$lastActiveUserId" +
- phi"assignee=$assignee, previousAssignee=$previousAssignee)"
- }
-}
-
-final case class Patient(id: UuidId[Patient],
- status: Patient.Status,
- name: String,
- dob: LocalDate,
- assignee: Option[StringId[User]],
- previousStatus: Option[Patient.Status],
- previousAssignee: Option[StringId[User]],
- lastActiveUserId: Option[StringId[User]],
- isUpdateRequired: Boolean,
- condition: String,
- orderId: PatientOrderId,
- lastUpdate: LocalDateTime) {
-
- import Patient.Status._
-
- if (previousStatus.nonEmpty) {
- assert(AllPrevious.contains(previousStatus.get), s"Previous status has invalid value: ${previousStatus.get}")
- }
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/PatientCriterion.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/PatientCriterion.scala
deleted file mode 100644
index 469b21c..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/PatientCriterion.scala
+++ /dev/null
@@ -1,67 +0,0 @@
-package xyz.driver.pdsuidomain.entities
-
-import java.time.LocalDateTime
-
-import xyz.driver.pdsuicommon.domain.{FuzzyValue, LongId, StringId}
-import xyz.driver.pdsuicommon.logging._
-
-object PatientCriterion {
- implicit def toPhiString(x: PatientCriterion): PhiString = {
- import x._
- phi"PatientCriterion(id=$id, patientLabelId=$patientLabelId, trialId=${Unsafe(trialId)}, nctId=${Unsafe(nctId)}, " +
- phi"criterionId=$criterionId, criterionValue=${Unsafe(criterionValue)}, " +
- phi"isImplicitMatch=$criterionIsDefining), criterionIsDefining=${Unsafe(criterionIsDefining)}, " +
- phi"eligibilityStatus=${Unsafe(eligibilityStatus)}, verifiedEligibilityStatus=${Unsafe(verifiedEligibilityStatus)}, " +
- phi"isVerified=${Unsafe(isVerified)}, lastUpdate=${Unsafe(lastUpdate)}"
- }
-
- /**
- * @see https://driverinc.atlassian.net/wiki/display/MTCH/EV+Business+Process
- */
- def getEligibilityStatus(criterionValue: Option[Boolean], primaryValue: Option[FuzzyValue]): Option[FuzzyValue] = {
- primaryValue match {
- case None => None
- case Some(FuzzyValue.Maybe) => Some(FuzzyValue.Maybe)
- case Some(_) if criterionValue.isEmpty => Some(FuzzyValue.Maybe)
- case Some(status) =>
- Some(
- FuzzyValue.fromBoolean(
- FuzzyValue.fromBoolean(
- criterionValue.getOrElse(throw new IllegalArgumentException("Criterion should not be empty"))) == status
- ))
- }
- }
-
-}
-
-/**
- * @param eligibilityStatus - a value, that selects an eligibility verifier (EV)
- * @param verifiedEligibilityStatus - a copy of eligibilityStatus, when a patient goes to routes curator (RC)
- * @param isVerified - is EV selected the eligibilityStatus?
- */
-final case class PatientCriterion(id: LongId[PatientCriterion],
- patientLabelId: LongId[PatientLabel],
- trialId: Long,
- nctId: StringId[Trial],
- criterionId: LongId[Criterion],
- criterionText: String,
- criterionValue: Option[Boolean],
- criterionIsDefining: Boolean,
- eligibilityStatus: Option[FuzzyValue],
- verifiedEligibilityStatus: Option[FuzzyValue],
- isVerified: Boolean,
- isVisible: Boolean,
- lastUpdate: LocalDateTime) {
- def isIneligibleForEv: Boolean = eligibilityStatus.contains(FuzzyValue.No) && isVerified
-}
-
-object PatientCriterionArm {
-
- implicit def toPhiString(x: PatientCriterionArm): PhiString = {
- import x._
- phi"PatientCriterionArm(patientCriterionId=$patientCriterionId, armId=$armId, armName=${Unsafe(armName)})"
- }
-
-}
-
-final case class PatientCriterionArm(patientCriterionId: LongId[PatientCriterion], armId: LongId[Arm], armName: String)
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/PatientEligibleTrial.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/PatientEligibleTrial.scala
deleted file mode 100644
index 8ee5b3c..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/PatientEligibleTrial.scala
+++ /dev/null
@@ -1,83 +0,0 @@
-package xyz.driver.pdsuidomain.entities
-
-import xyz.driver.pdsuicommon.domain.{FuzzyValue, LongId, StringId, UuidId}
-import xyz.driver.pdsuicommon.logging._
-
-object PatientTrialArm {
-
- implicit def toPhiString(x: PatientTrialArm): PhiString = {
- import x._
- phi"PatientTrialArm(armId=$armId, trialArmGroupId=$trialArmGroupId)"
- }
-}
-
-final case class PatientTrialArm(armId: LongId[Arm], trialArmGroupId: LongId[PatientTrialArmGroup])
-
-object PatientEligibleTrial {
- implicit def toPhiString(x: PatientEligibleTrial): PhiString = {
- import x._
- phi"PatientEligibleTrial(id=$id, patientId=$patientId, trialId=$trialId, hypothesisId=$hypothesisId)"
- }
-}
-
-final case class PatientEligibleTrial(id: UuidId[PatientEligibleTrial],
- patientId: UuidId[Patient],
- trialId: StringId[Trial],
- hypothesisId: UuidId[Hypothesis])
-
-object PatientTrialArmGroup {
-
- implicit def toPhiString(x: PatientTrialArmGroup): PhiString = {
- import x._
- phi"PatientTrialArmGroup(id=$id, eligibleTrialId=$eligibleTrialId, " +
- phi"eligibilityStatus=${Unsafe(eligibilityStatus)}, " +
- phi"verifiedEligibilityStatus=${Unsafe(verifiedEligibilityStatus)}, isVerified=$isVerified)"
- }
-
- /**
- * @see https://driverinc.atlassian.net/wiki/display/DMPD/EV+Business+Process
- */
- def getEligibilityStatusForRc(criterionList: TraversableOnce[PatientCriterion]): Option[FuzzyValue] = {
- def isEligible: Boolean = criterionList.forall(_.verifiedEligibilityStatus.contains(FuzzyValue.Yes))
- def isIneligible: Boolean = criterionList.exists(_.verifiedEligibilityStatus.contains(FuzzyValue.No))
- def isUnknown: Boolean = criterionList.forall(_.verifiedEligibilityStatus.isEmpty)
-
- if (isEligible) Some(FuzzyValue.Yes)
- else if (isIneligible) Some(FuzzyValue.No)
- else if (isUnknown) None
- else Some(FuzzyValue.Maybe)
- }
-}
-
-final case class PatientTrialArmGroup(id: LongId[PatientTrialArmGroup],
- eligibleTrialId: UuidId[PatientEligibleTrial],
- eligibilityStatus: Option[FuzzyValue],
- verifiedEligibilityStatus: Option[FuzzyValue],
- isVerified: Boolean)
-
-object PatientTrialArmGroupView {
-
- implicit def toPhiString(x: PatientTrialArmGroupView): PhiString = {
- import x._
- phi"PatientTrialArmGroupView(id=$id, patientId=$patientId, trialId=$trialId, " +
- phi"hypothesisId=$hypothesisId, eligibilityStatus=${Unsafe(eligibilityStatus)}, " +
- phi"verifiedEligibilityStatus=${Unsafe(verifiedEligibilityStatus)}, isVerified=$isVerified)"
- }
-}
-
-final case class PatientTrialArmGroupView(id: LongId[PatientTrialArmGroup],
- patientId: UuidId[Patient],
- trialId: StringId[Trial],
- hypothesisId: UuidId[Hypothesis],
- eligibilityStatus: Option[FuzzyValue],
- verifiedEligibilityStatus: Option[FuzzyValue],
- isVerified: Boolean) {
-
- def applyTo(trialArmGroup: PatientTrialArmGroup) = {
- trialArmGroup.copy(
- eligibilityStatus = this.eligibilityStatus,
- verifiedEligibilityStatus = this.verifiedEligibilityStatus,
- isVerified = this.isVerified
- )
- }
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/PatientHistory.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/PatientHistory.scala
deleted file mode 100644
index 39817c4..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/PatientHistory.scala
+++ /dev/null
@@ -1,92 +0,0 @@
-package xyz.driver.pdsuidomain.entities
-
-import java.time.{LocalDateTime, ZoneId}
-
-import xyz.driver.pdsuicommon.domain.{LongId, StringId, User, UuidId}
-import xyz.driver.pdsuicommon.logging._
-import xyz.driver.pdsuicommon.utils.Utils
-import xyz.driver.pdsuidomain.entities.PatientHistory.{Action, State}
-
-object PatientHistory {
-
- implicit def toPhiString(x: PatientHistory): PhiString = {
- import x._
- phi"PatientHistory(id=$id, executor=$executor, patientId=$patientId, state=$state, action=$action, created=$created)"
- }
-
- sealed trait State
- object State {
- case object Verify extends State
- case object Curate extends State
- case object Review extends State
- case object Flag extends State
-
- val All: Set[State] = Set[State](Verify, Curate, Review, Flag)
-
- val fromString: PartialFunction[String, State] = {
- case "Verify" => State.Verify
- case "Curate" => State.Curate
- case "Review" => State.Review
- case "Flag" => State.Flag
- }
-
- def stateToString(x: State): String = x match {
- case State.Verify => "Verify"
- case State.Curate => "Curate"
- case State.Review => "Review"
- case State.Flag => "Flag"
- }
-
- implicit def toPhiString(x: State): PhiString =
- Unsafe(Utils.getClassSimpleName(x.getClass))
- }
-
- sealed trait Action extends Product with Serializable {
-
- def oneOf(xs: Action*): Boolean = xs.contains(this)
-
- def oneOf(xs: Set[Action]): Boolean = xs.contains(this)
-
- }
-
- object Action {
- case object Start extends Action
- case object Submit extends Action
- case object Unassign extends Action
- case object Resolve extends Action
- case object Flag extends Action
- case object Archive extends Action
-
- val All: Set[Action] =
- Set[Action](Start, Submit, Unassign, Resolve, Flag, Archive)
-
- val fromString: PartialFunction[String, Action] = {
- case "Start" => Action.Start
- case "Submit" => Action.Submit
- case "Unassign" => Action.Unassign
- case "Resolve" => Action.Resolve
- case "Flag" => Action.Flag
- case "Archive" => Action.Archive
- }
-
- def actionToString(x: Action): String = x match {
- case Action.Start => "Start"
- case Action.Submit => "Submit"
- case Action.Unassign => "Unassign"
- case Action.Resolve => "Resolve"
- case Action.Flag => "Flag"
- case Action.Archive => "Archive"
- }
-
- implicit def toPhiString(x: Action): PhiString =
- Unsafe(Utils.getClassSimpleName(x.getClass))
- }
-
-}
-
-final case class PatientHistory(id: LongId[PatientHistory],
- executor: StringId[User],
- patientId: UuidId[Patient],
- state: State,
- action: Action,
- created: LocalDateTime = LocalDateTime.now(ZoneId.of("Z")))
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/PatientHypothesis.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/PatientHypothesis.scala
deleted file mode 100644
index 23bb546..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/PatientHypothesis.scala
+++ /dev/null
@@ -1,18 +0,0 @@
-package xyz.driver.pdsuidomain.entities
-
-import xyz.driver.pdsuicommon.domain.UuidId
-import xyz.driver.pdsuicommon.logging._
-
-object PatientHypothesis {
- implicit def toPhiString(x: PatientHypothesis): PhiString = {
- import x._
- phi"PatientHypothesis(id=$id, patientId=$patientId, hypothesisId=$hypothesisId, " +
- phi"rationale=${Unsafe(rationale)}, matchedTrials=${Unsafe(matchedTrials)})"
- }
-}
-
-final case class PatientHypothesis(id: UuidId[PatientHypothesis],
- patientId: UuidId[Patient],
- hypothesisId: UuidId[Hypothesis],
- rationale: Option[String],
- matchedTrials: Long)
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/PatientIssue.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/PatientIssue.scala
deleted file mode 100644
index f616754..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/PatientIssue.scala
+++ /dev/null
@@ -1,21 +0,0 @@
-package xyz.driver.pdsuidomain.entities
-
-import java.time.LocalDateTime
-
-import xyz.driver.pdsuicommon.domain._
-import xyz.driver.pdsuicommon.logging._
-
-final case class PatientIssue(id: LongId[PatientIssue],
- userId: StringId[User],
- patientId: UuidId[Patient],
- lastUpdate: LocalDateTime,
- isDraft: Boolean,
- text: String,
- archiveRequired: Boolean)
-
-object PatientIssue {
- implicit def toPhiString(x: PatientIssue): PhiString = {
- import x._
- phi"PatientIssue(id=$id, userId=$userId, patientId=$patientId)"
- }
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/PatientLabel.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/PatientLabel.scala
deleted file mode 100644
index 633a347..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/PatientLabel.scala
+++ /dev/null
@@ -1,38 +0,0 @@
-package xyz.driver.pdsuidomain.entities
-
-import xyz.driver.pdsuicommon.domain.{FuzzyValue, LongId, UuidId}
-import xyz.driver.pdsuicommon.logging._
-
-object PatientLabel {
- implicit def toPhiString(x: PatientLabel): PhiString = {
- import x._
- phi"PatientLabel(id=$id, patientId=$patientId, labelId=$labelId, " +
- phi"score=${Unsafe(score)}, primaryValue=${Unsafe(primaryValue)}, " +
- phi"verifiedPrimaryValue=${Unsafe(verifiedPrimaryValue)})"
- }
-}
-
-final case class PatientLabel(id: LongId[PatientLabel],
- patientId: UuidId[Patient],
- labelId: LongId[Label],
- score: Int,
- primaryValue: Option[FuzzyValue],
- verifiedPrimaryValue: Option[FuzzyValue],
- isImplicitMatch: Boolean,
- isVisible: Boolean)
-
-object PatientLabelEvidence {
- implicit def toPhiString(x: PatientLabelEvidence): PhiString = {
- import x._
- phi"PatientLabelEvidence(id=$id, patientLabelId=$patientLabelId, value=${Unsafe(value)}, " +
- phi"documentId=$documentId, evidenceId=$evidenceId, reportId=$reportId)"
- }
-}
-
-final case class PatientLabelEvidence(id: LongId[PatientLabelEvidence],
- patientLabelId: LongId[PatientLabel],
- value: FuzzyValue,
- evidenceText: String,
- reportId: Option[UuidId[DirectReport]],
- documentId: Option[LongId[Document]],
- evidenceId: Option[LongId[ExtractedData]])
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/PatientLabelEvidenceView.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/PatientLabelEvidenceView.scala
deleted file mode 100644
index 34e3741..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/PatientLabelEvidenceView.scala
+++ /dev/null
@@ -1,28 +0,0 @@
-package xyz.driver.pdsuidomain.entities
-
-import java.time.LocalDate
-
-import xyz.driver.pdsuicommon.domain._
-import xyz.driver.pdsuicommon.logging._
-
-object PatientLabelEvidenceView {
- implicit def toPhiString(x: PatientLabelEvidenceView): PhiString = {
- import x._
- phi"PatientLabelEvidenceView(id=$id, value=$value, documentId=$documentId, " +
- phi"evidenceId=$evidenceId, reportId=$reportId, patientId=$patientId, labelId=$labelId, " +
- phi"isImplicitMatch=$isImplicitMatch)"
- }
-}
-
-final case class PatientLabelEvidenceView(id: LongId[PatientLabelEvidence],
- value: FuzzyValue,
- evidenceText: String,
- documentId: Option[LongId[Document]],
- evidenceId: Option[LongId[ExtractedData]],
- reportId: Option[UuidId[DirectReport]],
- documentType: String,
- date: Option[LocalDate], // Document.startDate is optional
- providerType: String,
- patientId: UuidId[Patient],
- labelId: LongId[Label],
- isImplicitMatch: Boolean)
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/PatientOrderId.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/PatientOrderId.scala
deleted file mode 100644
index 50a97ce..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/PatientOrderId.scala
+++ /dev/null
@@ -1,14 +0,0 @@
-package xyz.driver.pdsuidomain.entities
-
-import java.util.UUID
-
-final case class PatientOrderId(id: UUID) {
- override def toString: String = id.toString
-}
-
-object PatientOrderId {
-
- def apply() = new PatientOrderId(UUID.randomUUID())
-
- def apply(x: String) = new PatientOrderId(UUID.fromString(x))
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/RawPatientDocument.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/RawPatientDocument.scala
deleted file mode 100644
index b66483c..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/RawPatientDocument.scala
+++ /dev/null
@@ -1,28 +0,0 @@
-package xyz.driver.pdsuidomain.entities
-
-import java.time.LocalDate
-
-import xyz.driver.pdsuicommon.domain.{LongId, UuidId}
-import xyz.driver.pdsuicommon.logging._
-
-final case class RawPatientDocument(disease: String,
- patientId: UuidId[Patient],
- requestId: RecordRequestId,
- recordId: LongId[MedicalRecord],
- recordStatus: MedicalRecord.Status,
- documentId: LongId[Document],
- documentType: String,
- documentProviderType: String,
- documentStartDate: LocalDate,
- documentStatus: Document.Status)
-
-object RawPatientDocument {
-
- implicit def toPhiString(x: RawPatientDocument): PhiString = {
- import x._
- phi"RawPatientDocument(disease=${Unsafe(disease)}, patientId=$patientId, requestId=$requestId, " +
- phi"recordId=$recordId, recordStatus=$recordStatus, documentId=$documentId, " +
- phi"documentType=${Unsafe(documentType)}, providerType=${Unsafe(documentProviderType)}, " +
- phi"startDate=$documentStartDate, documentStatus=$documentStatus)"
- }
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/RawPatientLabel.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/RawPatientLabel.scala
deleted file mode 100644
index 6114661..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/RawPatientLabel.scala
+++ /dev/null
@@ -1,30 +0,0 @@
-package xyz.driver.pdsuidomain.entities
-
-import java.time.LocalDate
-
-import xyz.driver.pdsuicommon.domain.{FuzzyValue, LongId, UuidId}
-import xyz.driver.pdsuicommon.logging._
-
-final case class RawPatientLabel(patientId: UuidId[Patient],
- labelId: LongId[Label],
- value: FuzzyValue,
- evidenceId: LongId[ExtractedData],
- evidenceText: String,
- disease: String,
- documentId: LongId[Document],
- requestId: RecordRequestId,
- documentType: String,
- providerType: String,
- startDate: LocalDate,
- endDate: Option[LocalDate])
-
-object RawPatientLabel {
-
- implicit def toPhiString(x: RawPatientLabel): PhiString = {
- import x._
- phi"RawPatientLabel(patientId=$patientId, labelId=$labelId, value=$value, evidenceId=${Unsafe(evidenceId)}, " +
- phi"evidenceText=${Unsafe(evidenceText)}, documentId=$documentId, requestId=${Unsafe(requestId)}, " +
- phi"documentType=${Unsafe(documentType)}, providerType=${Unsafe(providerType)}, " +
- phi"startDate=$startDate, endDate=$endDate)"
- }
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/RawTrialLabel.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/RawTrialLabel.scala
deleted file mode 100644
index 9e69c87..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/RawTrialLabel.scala
+++ /dev/null
@@ -1,31 +0,0 @@
-package xyz.driver.pdsuidomain.entities
-
-import java.time.LocalDateTime
-
-import xyz.driver.pdsuicommon.domain.{LongId, StringId, UuidId}
-import xyz.driver.pdsuicommon.logging._
-
-final case class RawTrialLabel(nctId: StringId[Trial],
- trialId: UuidId[Trial],
- condition: String,
- lastReviewed: LocalDateTime,
- armName: String,
- armId: LongId[Arm],
- labelId: LongId[Label],
- value: Option[Boolean],
- criterionId: LongId[Criterion],
- criteria: String,
- criterionArmId: LongId[Arm],
- isCompound: Boolean,
- isDefining: Boolean)
-
-object RawTrialLabel {
-
- implicit def toPhiString(x: RawTrialLabel): PhiString = {
- import x._
- phi"RawTrialLabel(nctId=$nctId, trialId=$trialId, condition=${Unsafe(condition)}, lastReviewed=$lastReviewed, " +
- phi"armId=$armId, armName=${Unsafe(armName)}, labelId=$labelId, value=$value, " +
- phi"criterionId=$criterionId, criteria=${Unsafe(criteria)}, criterionArmId=$criterionArmId, " +
- phi"isCompound=$isCompound, isDefining=$isDefining)"
- }
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/RecordRequestId.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/RecordRequestId.scala
deleted file mode 100644
index 5df87c2..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/RecordRequestId.scala
+++ /dev/null
@@ -1,15 +0,0 @@
-package xyz.driver.pdsuidomain.entities
-
-import java.util.UUID
-import xyz.driver.pdsuicommon.logging._
-
-final case class RecordRequestId(id: UUID) {
- override def toString: String = id.toString
-}
-
-object RecordRequestId {
-
- def apply() = new RecordRequestId(UUID.randomUUID())
-
- implicit def toPhiString(x: RecordRequestId): PhiString = phi"${x.id}"
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/ScrapedTrial.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/ScrapedTrial.scala
deleted file mode 100644
index e7ee1cb..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/ScrapedTrial.scala
+++ /dev/null
@@ -1,81 +0,0 @@
-package xyz.driver.pdsuidomain.entities
-
-import java.time.LocalDateTime
-import java.util.UUID
-
-import xyz.driver.pdsuicommon.logging._
-import xyz.driver.pdsuicommon.domain.UuidId
-
-final case class ScrapedStudyDesign(value: String)
-
-final case class ScrapedOverall(affiliation: String,
- status: String,
- facilityName: Option[String],
- firstName: Option[String],
- lastName: Option[String],
- phone: Option[String],
- phoneExt: Option[String],
- email: Option[String],
- isBackup: Boolean)
-
-final case class ScrapedInterventionType(value: String)
-
-final case class ScrapedIntervention(name: String,
- kind: ScrapedInterventionType,
- description: Option[String],
- isSynonym: Boolean)
-
-object ScrapedIntervention {
-
- implicit def toPhiString(x: ScrapedIntervention): PhiString =
- phi"ScrapedIntervention(${Unsafe(x.name)})"
-}
-
-final case class ScrapedArm(name: String, kind: Option[String], interventions: Set[ScrapedIntervention])
-
-object ScrapedArm {
-
- implicit def toPhiString(x: ScrapedArm): PhiString = {
- import x._
- phi"ScrapedArm(name=${Unsafe(name)}, inverventions=$interventions)"
- }
-}
-
-final case class ScrapedTrialChecksum(eligibilityCriteria: String,
- briefSummary: String,
- detailedDescription: String,
- armDescription: String)
-
-object ScrapedTrialChecksum {
-
- implicit def toPhiString(x: ScrapedTrialChecksum): PhiString = {
- import x._
- phi"ScrapedTrialChecksum(eligibilityCriteria=${Unsafe(eligibilityCriteria)}, briefSummary=${Unsafe(briefSummary)}, " +
- phi"detailedDescription=${Unsafe(detailedDescription)}, armDescription=${Unsafe(armDescription)}"
- }
-}
-
-object ScrapedTrial {
-
- implicit def toPhiString(x: ScrapedTrial): PhiString = {
- import x._
- phi"ScrapedTrial(rawId=$rawId, nctId=${Unsafe(nctId)}, arms=$arms, checksum=$checksum)"
- }
-}
-
-final case class ScrapedTrial(rawId: UuidId[ScrapedTrial],
- createdAt: LocalDateTime,
- disease: String,
- nctId: String,
- nctUuid: UUID,
- title: Option[String],
- startDate: Option[LocalDateTime],
- phase: String,
- studyDesign: Option[ScrapedStudyDesign],
- overall: Set[ScrapedOverall],
- // // see ClinicalTrialRaw
- // trialHtml: String,
- // eligibilityText: String,
- lastReviewed: LocalDateTime,
- arms: Set[ScrapedArm],
- checksum: ScrapedTrialChecksum)
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/Trial.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/Trial.scala
deleted file mode 100644
index db4def2..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/Trial.scala
+++ /dev/null
@@ -1,105 +0,0 @@
-package xyz.driver.pdsuidomain.entities
-
-import java.time.LocalDateTime
-
-import xyz.driver.pdsuicommon.domain.{LongId, StringId, User, UuidId}
-import xyz.driver.pdsuicommon.logging._
-import xyz.driver.pdsuicommon.utils.Utils
-import xyz.driver.pdsuidomain.entities.Trial.{Condition, Status}
-
-final case class StudyDesign(id: LongId[StudyDesign], name: String)
-
-object StudyDesign {
- implicit def toPhiString(x: StudyDesign): PhiString = {
- import x._
- phi"StudyDesign(id=$id, category=${Unsafe(name)})"
- }
-}
-
-object Trial {
-
- sealed trait Status {
- def oneOf(xs: Status*): Boolean = xs.contains(this)
- def oneOf(xs: Set[Status]): Boolean = xs.contains(this)
- }
-
- object Status {
- case object New extends Status
- case object ReviewSummary extends Status
- case object Summarized extends Status
- case object PendingUpdate extends Status
- case object Update extends Status
- case object ReviewCriteria extends Status
- case object Done extends Status
- case object Flagged extends Status
- case object Archived extends Status
-
- val All = Set[Status](
- New,
- ReviewSummary,
- Summarized,
- PendingUpdate,
- Update,
- ReviewCriteria,
- Done,
- Flagged,
- Archived
- )
-
- val AllPrevious = Set[Status](New, ReviewSummary, Summarized, ReviewCriteria)
-
- implicit def toPhiString(x: Status): PhiString = Unsafe(Utils.getClassSimpleName(x.getClass))
- }
-
- implicit def toPhiString(x: Trial): PhiString = {
- import x._
- phi"Trial(id=$id, externalId=$externalId, status=$status, previousStatus=$previousStatus, " +
- phi"lastActiveUserId=$lastActiveUserId, assignee=$assignee, previousAssignee=$previousAssignee, "
- }
-
- final case class Locations(locations: List[String])
-
- sealed trait Condition
-
- object Condition {
-
- case object Breast extends Condition
- case object Lung extends Condition
- case object Prostate extends Condition
-
- def fromString(condition: String): Option[Condition] = condition match {
- case "Breast" => Some(Breast)
- case "Lung" => Some(Lung)
- case "Prostate" => Some(Prostate)
- case _ => None
- }
-
- val All: Set[Condition] = Set(Breast, Lung, Prostate)
- }
-}
-
-final case class Trial(id: StringId[Trial],
- externalId: UuidId[Trial],
- status: Status,
- assignee: Option[StringId[User]],
- previousStatus: Option[Status],
- previousAssignee: Option[StringId[User]],
- lastActiveUserId: Option[StringId[User]],
- lastUpdate: LocalDateTime,
- condition: Condition,
- phase: String,
- hypothesisId: Option[UuidId[Hypothesis]],
- studyDesignId: Option[LongId[StudyDesign]],
- originalStudyDesign: Option[String],
- isPartner: Boolean,
- overview: Option[String],
- overviewTemplate: String,
- isUpdated: Boolean,
- title: String,
- originalTitle: String) {
- import Trial.Status._
-
- if (previousStatus.nonEmpty) {
- assert(AllPrevious.contains(previousStatus.get), s"Previous status has invalid value: ${previousStatus.get}")
- }
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/TrialHistory.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/TrialHistory.scala
deleted file mode 100644
index c73aefe..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/TrialHistory.scala
+++ /dev/null
@@ -1,92 +0,0 @@
-package xyz.driver.pdsuidomain.entities
-
-import java.time.{LocalDateTime, ZoneId}
-
-import xyz.driver.pdsuicommon.domain._
-import xyz.driver.pdsuicommon.logging._
-import xyz.driver.pdsuicommon.utils.Utils
-import TrialHistory._
-
-object TrialHistory {
-
- implicit def toPhiString(x: TrialHistory): PhiString = {
- import x._
- phi"TrialHistory(id=$id, executor=$executor, trialId=$trialId, state=$state, action=$action, created=$created)"
- }
-
- sealed trait State
- object State {
- case object Summarize extends State
- case object Criteriarize extends State
- case object Review extends State
- case object Flag extends State
-
- val All: Set[State] = Set[State](Summarize, Criteriarize, Review, Flag)
-
- val fromString: PartialFunction[String, State] = {
- case "Summarize" => State.Summarize
- case "Criteriarize" => State.Criteriarize
- case "Review" => State.Review
- case "Flag" => State.Flag
- }
-
- def stateToString(x: State): String = x match {
- case State.Summarize => "Summarize"
- case State.Criteriarize => "Criteriarize"
- case State.Review => "Review"
- case State.Flag => "Flag"
- }
-
- implicit def toPhiString(x: State): PhiString =
- Unsafe(Utils.getClassSimpleName(x.getClass))
- }
-
- sealed trait Action extends Product with Serializable {
-
- def oneOf(xs: Action*): Boolean = xs.contains(this)
-
- def oneOf(xs: Set[Action]): Boolean = xs.contains(this)
-
- }
-
- object Action {
- case object Start extends Action
- case object Submit extends Action
- case object Unassign extends Action
- case object Resolve extends Action
- case object Flag extends Action
- case object Archive extends Action
-
- val All: Set[Action] =
- Set[Action](Start, Submit, Unassign, Resolve, Flag, Archive)
-
- val fromString: PartialFunction[String, Action] = {
- case "Start" => Action.Start
- case "Submit" => Action.Submit
- case "Unassign" => Action.Unassign
- case "Resolve" => Action.Resolve
- case "Flag" => Action.Flag
- case "Archive" => Action.Archive
- }
-
- def actionToString(x: Action): String = x match {
- case Action.Start => "Start"
- case Action.Submit => "Submit"
- case Action.Unassign => "Unassign"
- case Action.Resolve => "Resolve"
- case Action.Flag => "Flag"
- case Action.Archive => "Archive"
- }
-
- implicit def toPhiString(x: Action): PhiString =
- Unsafe(Utils.getClassSimpleName(x.getClass))
- }
-
-}
-
-final case class TrialHistory(id: LongId[TrialHistory],
- executor: StringId[User],
- trialId: StringId[Trial],
- state: State,
- action: Action,
- created: LocalDateTime = LocalDateTime.now(ZoneId.of("Z")))
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/TrialIssue.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/TrialIssue.scala
deleted file mode 100644
index 2514f4d..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/TrialIssue.scala
+++ /dev/null
@@ -1,23 +0,0 @@
-package xyz.driver.pdsuidomain.entities
-
-import java.time.LocalDateTime
-
-import xyz.driver.pdsuicommon.domain.{LongId, StringId, User}
-import xyz.driver.pdsuicommon.logging._
-
-final case class TrialIssue(id: LongId[TrialIssue],
- userId: StringId[User],
- trialId: StringId[Trial],
- lastUpdate: LocalDateTime,
- isDraft: Boolean,
- text: String,
- evidence: String,
- archiveRequired: Boolean,
- meta: String)
-
-object TrialIssue {
- implicit def toPhiString(x: TrialIssue): PhiString = {
- import x._
- phi"TrialIssue(id=$id, userId=$userId, trialId=$trialId)"
- }
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/UserHistory.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/UserHistory.scala
deleted file mode 100644
index 9be26b9..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/UserHistory.scala
+++ /dev/null
@@ -1,145 +0,0 @@
-package xyz.driver.pdsuidomain.entities
-
-import java.time.{LocalDateTime, ZoneId}
-
-import xyz.driver.pdsuicommon.domain._
-import xyz.driver.pdsuicommon.logging._
-import xyz.driver.pdsuicommon.utils.Utils
-
-final case class UserHistory(id: LongId[UserHistory],
- executor: StringId[User],
- recordId: Option[LongId[MedicalRecord]] = None,
- documentId: Option[LongId[Document]] = None,
- trialId: Option[StringId[Trial]] = None,
- patientId: Option[UuidId[Patient]] = None,
- state: UserHistory.State,
- action: UserHistory.Action,
- created: LocalDateTime = LocalDateTime.now(ZoneId.of("Z")))
-
-object UserHistory {
-
- def forDocument(executor: StringId[User],
- documentId: LongId[Document],
- state: UserHistory.State,
- action: UserHistory.Action): UserHistory = UserHistory(
- id = LongId(0L),
- executor = executor,
- documentId = Some(documentId),
- state = state,
- action = action
- )
-
- def forRecord(executor: StringId[User],
- recordId: LongId[MedicalRecord],
- state: UserHistory.State,
- action: UserHistory.Action): UserHistory = UserHistory(
- id = LongId(0L),
- executor = executor,
- recordId = Some(recordId),
- state = state,
- action = action
- )
-
- def forPatient(executor: StringId[User],
- patientId: UuidId[Patient],
- state: UserHistory.State,
- action: UserHistory.Action): UserHistory = UserHistory(
- id = LongId(0L),
- executor = executor,
- patientId = Some(patientId),
- state = state,
- action = action
- )
-
- sealed trait State extends Product with Serializable {
-
- def oneOf(xs: State*): Boolean = xs.contains(this)
-
- def oneOf(xs: Set[State]): Boolean = xs.contains(this)
- }
-
- object State {
- case object Clean extends State
- case object Organize extends State
- case object Extract extends State
- case object Summarize extends State
- case object Criteriarize extends State
- case object Verify extends State
- case object Curate extends State
- case object Review extends State
- case object Flag extends State
-
- val All: Set[State] = Set[State](Clean, Organize, Extract, Summarize, Criteriarize, Verify, Curate, Review, Flag)
-
- val fromString: PartialFunction[String, State] = {
- case "Clean" => State.Clean
- case "Organize" => State.Organize
- case "Extract" => State.Extract
- case "Summarize" => State.Summarize
- case "Criteriarize" => State.Criteriarize
- case "Verify" => State.Verify
- case "Curate" => State.Curate
- case "Review" => State.Review
- case "Flag" => State.Flag
- }
-
- def stateToString(x: State): String = x match {
- case State.Clean => "Clean"
- case State.Organize => "Organize"
- case State.Extract => "Extract"
- case State.Summarize => "Summarize"
- case State.Criteriarize => "Criteriarize"
- case State.Verify => "Verify"
- case State.Curate => "Curate"
- case State.Review => "Review"
- case State.Flag => "Flag"
- }
-
- implicit def toPhiString(x: State): PhiString = Unsafe(Utils.getClassSimpleName(x.getClass))
- }
-
- sealed trait Action extends Product with Serializable {
-
- def oneOf(xs: Action*): Boolean = xs.contains(this)
-
- def oneOf(xs: Set[Action]): Boolean = xs.contains(this)
- }
-
- object Action {
- case object Start extends Action
- case object Submit extends Action
- case object Unassign extends Action
- case object Resolve extends Action
- case object Flag extends Action
- case object Archive extends Action
-
- val All: Set[Action] = Set[Action](Start, Submit, Unassign, Resolve, Flag, Archive)
-
- val fromString: PartialFunction[String, Action] = {
- case "Start" => Action.Start
- case "Submit" => Action.Submit
- case "Unassign" => Action.Unassign
- case "Resolve" => Action.Resolve
- case "Flag" => Action.Flag
- case "Archive" => Action.Archive
- }
-
- def actionToString(x: Action): String = x match {
- case Action.Start => "Start"
- case Action.Submit => "Submit"
- case Action.Unassign => "Unassign"
- case Action.Resolve => "Resolve"
- case Action.Flag => "Flag"
- case Action.Archive => "Archive"
- }
-
- implicit def toPhiString(x: Action): PhiString = Unsafe(Utils.getClassSimpleName(x.getClass))
- }
-
- implicit def toPhiString(x: UserHistory): PhiString = {
- import x._
- phi"UserHistory(id=$id, executor=$executor, recordId=$recordId, " +
- phi"documentId=$documentId, trialId=$trialId, patientId=$patientId, " +
- phi"state=$state, action=$action, created=$created)"
- }
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/export/patient/ExportPatientLabel.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/export/patient/ExportPatientLabel.scala
deleted file mode 100644
index c69fc09..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/export/patient/ExportPatientLabel.scala
+++ /dev/null
@@ -1,19 +0,0 @@
-package xyz.driver.pdsuidomain.entities.export.patient
-
-import xyz.driver.pdsuicommon.domain.LongId
-import xyz.driver.pdsuicommon.logging._
-import xyz.driver.pdsuidomain.entities.{Label, RawPatientLabel}
-
-final case class ExportPatientLabel(id: LongId[Label], evidences: List[ExportPatientLabelEvidence])
-
-object ExportPatientLabel extends PhiLogging {
-
- implicit def toPhiString(x: ExportPatientLabel): PhiString = {
- import x._
- phi"ExportPatientLabel(id=$id, evidences=$evidences)"
- }
-
- def fromRaw(labelId: LongId[Label], rawPatientLabels: List[RawPatientLabel]): ExportPatientLabel = {
- ExportPatientLabel(id = labelId, evidences = rawPatientLabels.map(ExportPatientLabelEvidence.fromRaw))
- }
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/export/patient/ExportPatientLabelEvidence.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/export/patient/ExportPatientLabelEvidence.scala
deleted file mode 100644
index fb40339..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/export/patient/ExportPatientLabelEvidence.scala
+++ /dev/null
@@ -1,32 +0,0 @@
-package xyz.driver.pdsuidomain.entities.export.patient
-
-import xyz.driver.pdsuicommon.domain._
-import xyz.driver.pdsuicommon.logging._
-import xyz.driver.pdsuidomain.entities.{ExtractedData, RawPatientLabel}
-
-final case class ExportPatientLabelEvidence(id: LongId[ExtractedData],
- value: FuzzyValue,
- evidenceText: String,
- document: ExportPatientLabelEvidenceDocument)
-
-object ExportPatientLabelEvidence {
-
- implicit def toPhiString(x: ExportPatientLabelEvidence): PhiString = {
- import x._
- phi"ExportPatientLabelEvidence(id=${Unsafe(id)}, value=$value, " +
- phi"evidenceText=${Unsafe(evidenceText)}, document=$document)"
- }
-
- def fromRaw(x: RawPatientLabel) = ExportPatientLabelEvidence(
- id = x.evidenceId,
- value = x.value,
- evidenceText = x.evidenceText,
- document = ExportPatientLabelEvidenceDocument(
- x.documentId,
- x.requestId,
- x.documentType,
- x.providerType,
- x.startDate
- )
- )
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/export/patient/ExportPatientLabelEvidenceDocument.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/export/patient/ExportPatientLabelEvidenceDocument.scala
deleted file mode 100644
index 99912bc..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/export/patient/ExportPatientLabelEvidenceDocument.scala
+++ /dev/null
@@ -1,30 +0,0 @@
-package xyz.driver.pdsuidomain.entities.export.patient
-
-import java.time.LocalDate
-
-import xyz.driver.pdsuicommon.domain._
-import xyz.driver.pdsuicommon.logging._
-import xyz.driver.pdsuidomain.entities.{Document, RawPatientLabel, RecordRequestId}
-
-final case class ExportPatientLabelEvidenceDocument(documentId: LongId[Document],
- requestId: RecordRequestId,
- documentType: String,
- providerType: String,
- date: LocalDate)
-
-object ExportPatientLabelEvidenceDocument extends PhiLogging {
-
- implicit def toPhiString(x: ExportPatientLabelEvidenceDocument): PhiString = {
- import x._
- phi"ExportPatientLabelEvidenceDocument(documentId=$documentId, requestId=$requestId, " +
- phi"documentType=${Unsafe(documentType)}, providerType=${Unsafe(providerType)}, date=$date)"
- }
-
- def fromRaw(x: RawPatientLabel) = ExportPatientLabelEvidenceDocument(
- documentId = x.documentId,
- requestId = x.requestId,
- documentType = x.documentType,
- providerType = x.providerType,
- date = x.startDate
- )
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/export/patient/ExportPatientWithLabels.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/export/patient/ExportPatientWithLabels.scala
deleted file mode 100644
index bd6173b..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/export/patient/ExportPatientWithLabels.scala
+++ /dev/null
@@ -1,27 +0,0 @@
-package xyz.driver.pdsuidomain.entities.export.patient
-
-import xyz.driver.pdsuicommon.domain._
-import xyz.driver.pdsuicommon.logging._
-import xyz.driver.pdsuidomain.entities.{Patient, RawPatientLabel}
-
-import scala.collection.breakOut
-
-final case class ExportPatientWithLabels(patientId: UuidId[Patient],
- labelVersion: Long,
- labels: List[ExportPatientLabel])
-
-object ExportPatientWithLabels {
-
- implicit def toPhiString(x: ExportPatientWithLabels): PhiString = {
- import x._
- phi"ExportPatientWithLabels(patientId=$patientId, version=${Unsafe(labelVersion)}, labels=$labels)"
- }
-
- def fromRaw(patientId: UuidId[Patient], rawPatientRefs: List[RawPatientLabel]) = ExportPatientWithLabels(
- patientId = patientId,
- labelVersion = 1L, // TODO It is needed to replace this mock label version.
- labels = rawPatientRefs
- .groupBy(_.labelId)
- .map(Function.tupled(ExportPatientLabel.fromRaw))(breakOut)
- )
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/export/trial/ExportTrialArm.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/export/trial/ExportTrialArm.scala
deleted file mode 100644
index 5a9a406..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/export/trial/ExportTrialArm.scala
+++ /dev/null
@@ -1,15 +0,0 @@
-package xyz.driver.pdsuidomain.entities.export.trial
-
-import xyz.driver.pdsuicommon.domain._
-import xyz.driver.pdsuicommon.logging._
-import xyz.driver.pdsuidomain.entities.Arm
-
-final case class ExportTrialArm(armId: LongId[Arm], armName: String)
-
-object ExportTrialArm {
-
- implicit def toPhiString(x: ExportTrialArm): PhiString = {
- import x._
- phi"ExportTrialArm(armId=$armId, armName=${Unsafe(armName)})"
- }
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/export/trial/ExportTrialLabelCriterion.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/export/trial/ExportTrialLabelCriterion.scala
deleted file mode 100644
index 7bff22c..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/export/trial/ExportTrialLabelCriterion.scala
+++ /dev/null
@@ -1,32 +0,0 @@
-package xyz.driver.pdsuidomain.entities.export.trial
-
-import xyz.driver.pdsuicommon.domain._
-import xyz.driver.pdsuicommon.logging._
-import xyz.driver.pdsuidomain.entities.{Arm, Criterion, Label, RawTrialLabel}
-
-final case class ExportTrialLabelCriterion(criterionId: LongId[Criterion],
- value: Option[Boolean],
- labelId: LongId[Label],
- armIds: Set[LongId[Arm]],
- criteria: String,
- isCompound: Boolean,
- isDefining: Boolean)
-
-object ExportTrialLabelCriterion {
-
- implicit def toPhiString(x: ExportTrialLabelCriterion): PhiString = {
- import x._
- phi"TrialLabelCriterion(criterionId=$criterionId, value=$value, labelId=$labelId, " +
- phi"criteria=${Unsafe(criteria)}, isCompound=$isCompound, isDefining=$isDefining)"
- }
-
- def fromRaw(x: RawTrialLabel, armIds: Set[LongId[Arm]]) = ExportTrialLabelCriterion(
- criterionId = x.criterionId,
- value = x.value,
- labelId = x.labelId,
- armIds = armIds,
- criteria = x.criteria,
- isCompound = x.isCompound,
- isDefining = x.isDefining
- )
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/export/trial/ExportTrialWithLabels.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/export/trial/ExportTrialWithLabels.scala
deleted file mode 100644
index 60b74ff..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/export/trial/ExportTrialWithLabels.scala
+++ /dev/null
@@ -1,57 +0,0 @@
-package xyz.driver.pdsuidomain.entities.export.trial
-
-import java.time.LocalDateTime
-
-import xyz.driver.pdsuicommon.domain._
-import xyz.driver.pdsuicommon.logging._
-import xyz.driver.pdsuidomain.entities.{RawTrialLabel, Trial}
-
-import scala.collection.breakOut
-
-final case class ExportTrialWithLabels(nctId: StringId[Trial],
- trialId: UuidId[Trial],
- condition: String,
- lastReviewed: LocalDateTime,
- labelVersion: Long,
- arms: List[ExportTrialArm],
- criteria: List[ExportTrialLabelCriterion])
-
-object ExportTrialWithLabels {
-
- implicit def toPhiString(x: ExportTrialWithLabels): PhiString = {
- import x._
- phi"TrialWithLabels(nctId=$nctId, trialId=$trialId, condition=${Unsafe(condition)}, " +
- phi"lastReviewed=$lastReviewed, labelVersion=${Unsafe(labelVersion)}, arms=$arms, criteria=$criteria)"
- }
-
- def fromRaw(rawData: List[RawTrialLabel]): ExportTrialWithLabels = {
- val trials: Set[StringId[Trial]] = rawData.map(_.nctId)(breakOut)
-
- assert(trials.size == 1, "There are more than one trials in the rawData")
- val trial = rawData.head
-
- ExportTrialWithLabels(
- nctId = trial.nctId,
- trialId = trial.trialId,
- condition = trial.condition,
- lastReviewed = trial.lastReviewed,
- labelVersion = 1, // TODO It is needed to replace this mock label version.
- arms = rawData
- .groupBy(_.armId)
- .map {
- case (armId, rawTrials) =>
- ExportTrialArm(armId, rawTrials.head.armName)
- }(breakOut),
- criteria = rawData
- .groupBy { x =>
- (x.criterionId, x.labelId)
- }
- .map {
- case (_, rawTrialLabels) =>
- val armIds = rawTrialLabels.map(_.criterionArmId).toSet
- ExportTrialLabelCriterion.fromRaw(rawTrialLabels.head, armIds)
- }(breakOut)
- )
- }
-
-}
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/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/category/ApiCategory.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/category/ApiCategory.scala
deleted file mode 100644
index f1e15f3..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/category/ApiCategory.scala
+++ /dev/null
@@ -1,23 +0,0 @@
-package xyz.driver.pdsuidomain.formats.json.category
-
-import play.api.libs.functional.syntax._
-import play.api.libs.json.{Format, JsPath}
-import xyz.driver.pdsuidomain.entities.CategoryWithLabels
-import xyz.driver.pdsuidomain.formats.json.label.ApiLabel
-
-final case class ApiCategory(id: Long, name: String, labels: List[ApiLabel])
-
-object ApiCategory {
-
- implicit val format: Format[ApiCategory] = (
- (JsPath \ "id").format[Long] and
- (JsPath \ "name").format[String] and
- (JsPath \ "labels").format[List[ApiLabel]]
- )(ApiCategory.apply, unlift(ApiCategory.unapply))
-
- def fromDomain(categoryWithLabels: CategoryWithLabels) = ApiCategory(
- id = categoryWithLabels.category.id.id,
- name = categoryWithLabels.category.name,
- labels = categoryWithLabels.labels.map(x => ApiLabel(x.id.id, x.name, x.categoryId.id))
- )
-}
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 4986b17..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/criterion/ApiCriterion.scala
+++ /dev/null
@@ -1,55 +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.{Arm, 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) {
-
- def toDomain = RichCriterion(
- criterion = Criterion(
- id = LongId[Criterion](id),
- trialId = StringId[Trial](trialId),
- text,
- isCompound,
- meta.getOrElse("")
- ),
- armIds = arms.map(LongId[Arm]),
- 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]
- )(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
- )
-}
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 ab7641f..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/criterion/ApiNewCriterion.scala
+++ /dev/null
@@ -1,43 +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) {
-
- def toDomain = RichCriterion(
- criterion = Criterion(
- id = LongId(0L),
- meta = meta.getOrElse(""),
- trialId = StringId(trialId),
- isCompound = isCompound.getOrElse(false),
- text = text
- ),
- armIds = arms.getOrElse(Seq.empty).map(LongId[Arm]),
- 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]
- )(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 2bcda56..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/criterion/ApiUpdateCriterion.scala
+++ /dev/null
@@ -1,60 +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.{Arm, 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],
- labels: Tristate[Seq[ApiCriterionLabel]]) {
-
- def applyTo(orig: RichCriterion): RichCriterion = RichCriterion(
- criterion = applyTo(orig.criterion),
- armIds = arms.cata(_.map(LongId[Arm]), 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
- )
-}
-
-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 \ "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 \ "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/document/ApiDocument.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/document/ApiDocument.scala
deleted file mode 100644
index 1869ff3..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/document/ApiDocument.scala
+++ /dev/null
@@ -1,107 +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.pdsuicommon.json.JsonSerializer
-
-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],
- status: Option[String],
- previousStatus: Option[String],
- assignee: Option[String],
- previousAssignee: Option[String],
- lastActiveUser: Option[String],
- meta: Option[String]) {
-
- 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),
- meta = this.meta.map(x => TextJson(JsonSerializer.deserialize[Document.Meta](x))),
- startDate = this.startDate,
- endDate = this.endDate,
- lastUpdate = this.lastUpdate.toLocalDateTime()
- )
-
-}
-
-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 \ "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)))
- )(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),
- 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))
- )
- }
-}
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 8b4974f..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/document/ApiDocumentType.scala
+++ /dev/null
@@ -1,28 +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.pdsuicommon.domain.LongId
-import xyz.driver.pdsuidomain.entities.DocumentType
-
-final case class ApiDocumentType(id: Long, name: String) {
-
- def toDomain = DocumentType(
- id = LongId(this.id),
- name = this.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 eae0c62..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/document/ApiPartialDocument.scala
+++ /dev/null
@@ -1,124 +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],
- 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,
- 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
- )
-
- 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,
- meta = meta.map(x => TextJson(JsonSerializer.deserialize[Meta](x))).toOption,
- previousStatus = None,
- assignee = None,
- previousAssignee = None,
- lastActiveUserId = None,
- lastUpdate = LocalDateTime.MIN
- )
- } 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 \ "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 \ "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 c0eddad..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/document/ApiProviderType.scala
+++ /dev/null
@@ -1,28 +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.pdsuicommon.domain.LongId
-import xyz.driver.pdsuidomain.entities.ProviderType
-
-final case class ApiProviderType(id: Long, name: String) {
-
- def toDomain = ProviderType(
- id = LongId(this.id),
- name = this.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/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/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/evidence/ApiPatientLabelEvidence.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/evidence/ApiPatientLabelEvidence.scala
deleted file mode 100644
index e0f23e3..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/evidence/ApiPatientLabelEvidence.scala
+++ /dev/null
@@ -1,34 +0,0 @@
-package xyz.driver.pdsuidomain.formats.json.evidence
-
-import java.time.LocalDate
-
-import play.api.libs.json._
-import xyz.driver.pdsuicommon.domain.FuzzyValue
-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 = FuzzyValue.valueToString(x.value),
- evidenceText = x.evidenceText,
- documentId = x.documentId.map(_.id),
- evidenceId = x.evidenceId.map(_.id),
- reportId = x.reportId.map(_.toString),
- documentType = x.documentType,
- date = x.date.get,
- providerType = x.providerType
- )
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportPatientLabel.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportPatientLabel.scala
deleted file mode 100644
index 0ef1c68..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportPatientLabel.scala
+++ /dev/null
@@ -1,28 +0,0 @@
-package xyz.driver.pdsuidomain.formats.json.export
-
-import play.api.libs.functional.syntax._
-import play.api.libs.json.{Format, JsPath}
-import xyz.driver.pdsuicommon.domain.LongId
-import xyz.driver.pdsuidomain.entities.export.patient.ExportPatientLabel
-
-final case class ApiExportPatientLabel(id: String, evidences: List[ApiExportPatientLabelEvidence]) {
-
- def toDomain = ExportPatientLabel(
- id = LongId(this.id.toLong),
- evidences = this.evidences.map(_.toDomain)
- )
-
-}
-
-object ApiExportPatientLabel {
-
- implicit val format: Format[ApiExportPatientLabel] = (
- (JsPath \ "labelId").format[String] and
- (JsPath \ "evidence").format[List[ApiExportPatientLabelEvidence]]
- )(ApiExportPatientLabel.apply, unlift(ApiExportPatientLabel.unapply))
-
- def fromDomain(label: ExportPatientLabel) = ApiExportPatientLabel(
- id = label.id.toString,
- evidences = label.evidences.map(ApiExportPatientLabelEvidence.fromDomain)
- )
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportPatientLabelEvidence.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportPatientLabelEvidence.scala
deleted file mode 100644
index d141762..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportPatientLabelEvidence.scala
+++ /dev/null
@@ -1,38 +0,0 @@
-package xyz.driver.pdsuidomain.formats.json.export
-
-import play.api.libs.functional.syntax._
-import play.api.libs.json._
-import xyz.driver.pdsuicommon.domain.{FuzzyValue, LongId}
-import xyz.driver.pdsuidomain.entities.export.patient.ExportPatientLabelEvidence
-
-final case class ApiExportPatientLabelEvidence(evidenceId: String,
- labelValue: String,
- evidenceText: String,
- document: ApiExportPatientLabelEvidenceDocument) {
-
- def toDomain = ExportPatientLabelEvidence(
- id = LongId(this.evidenceId.toLong),
- value = FuzzyValue.fromString
- .applyOrElse(this.labelValue, (s: String) => throw new NoSuchElementException(s"Unknown fuzzy value $s")),
- evidenceText = this.evidenceText,
- document = this.document.toDomain
- )
-
-}
-
-object ApiExportPatientLabelEvidence {
-
- implicit val format: Format[ApiExportPatientLabelEvidence] = (
- (JsPath \ "evidenceId").format[String] and
- (JsPath \ "labelValue").format[String](Writes[String](x => JsString(x.toUpperCase))) and
- (JsPath \ "evidenceText").format[String] and
- (JsPath \ "document").format[ApiExportPatientLabelEvidenceDocument]
- )(ApiExportPatientLabelEvidence.apply, unlift(ApiExportPatientLabelEvidence.unapply))
-
- def fromDomain(evidence: ExportPatientLabelEvidence) = ApiExportPatientLabelEvidence(
- evidenceId = evidence.id.toString,
- labelValue = FuzzyValue.valueToString(evidence.value),
- evidenceText = evidence.evidenceText,
- document = ApiExportPatientLabelEvidenceDocument.fromDomain(evidence.document)
- )
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportPatientLabelEvidenceDocument.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportPatientLabelEvidenceDocument.scala
deleted file mode 100644
index 6999301..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportPatientLabelEvidenceDocument.scala
+++ /dev/null
@@ -1,46 +0,0 @@
-package xyz.driver.pdsuidomain.formats.json.export
-
-import java.time.LocalDate
-import java.util.UUID
-
-import play.api.libs.functional.syntax._
-import play.api.libs.json.{Format, JsPath}
-import xyz.driver.pdsuicommon.domain.LongId
-import xyz.driver.pdsuidomain.entities.RecordRequestId
-import xyz.driver.pdsuidomain.entities.export.patient.ExportPatientLabelEvidenceDocument
-
-final case class ApiExportPatientLabelEvidenceDocument(documentId: String,
- requestId: String,
- documentType: String,
- providerType: String,
- date: LocalDate) {
-
- def toDomain = ExportPatientLabelEvidenceDocument(
- documentId = LongId(this.documentId.toLong),
- requestId = RecordRequestId(UUID.fromString(this.requestId)),
- documentType = this.documentType,
- providerType = this.providerType,
- date = this.date
- )
-
-}
-
-object ApiExportPatientLabelEvidenceDocument {
-
- implicit val format: Format[ApiExportPatientLabelEvidenceDocument] = (
- (JsPath \ "documentId").format[String] and
- (JsPath \ "requestId").format[String] and
- (JsPath \ "documentType").format[String] and
- (JsPath \ "providerType").format[String] and
- (JsPath \ "date").format[LocalDate]
- )(ApiExportPatientLabelEvidenceDocument.apply, unlift(ApiExportPatientLabelEvidenceDocument.unapply))
-
- def fromDomain(document: ExportPatientLabelEvidenceDocument) =
- ApiExportPatientLabelEvidenceDocument(
- documentId = document.documentId.toString,
- requestId = document.requestId.toString,
- documentType = document.documentType,
- providerType = document.providerType,
- date = document.date
- )
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportPatientWithLabels.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportPatientWithLabels.scala
deleted file mode 100644
index fc9bab7..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportPatientWithLabels.scala
+++ /dev/null
@@ -1,31 +0,0 @@
-package xyz.driver.pdsuidomain.formats.json.export
-
-import play.api.libs.functional.syntax._
-import play.api.libs.json.{Format, JsPath}
-import xyz.driver.pdsuicommon.domain.UuidId
-import xyz.driver.pdsuidomain.entities.export.patient.ExportPatientWithLabels
-
-final case class ApiExportPatientWithLabels(patientId: String, labelVersion: Long, labels: List[ApiExportPatientLabel]) {
-
- def toDomain = ExportPatientWithLabels(
- patientId = UuidId(this.patientId),
- labelVersion = this.labelVersion,
- labels = this.labels.map(_.toDomain)
- )
-
-}
-
-object ApiExportPatientWithLabels {
-
- implicit val format: Format[ApiExportPatientWithLabels] = (
- (JsPath \ "patientId").format[String] and
- (JsPath \ "labelVersion").format[Long] and
- (JsPath \ "labels").format[List[ApiExportPatientLabel]]
- )(ApiExportPatientWithLabels.apply, unlift(ApiExportPatientWithLabels.unapply))
-
- def fromDomain(patient: ExportPatientWithLabels) = ApiExportPatientWithLabels(
- patientId = patient.patientId.toString,
- labelVersion = patient.labelVersion,
- labels = patient.labels.map(ApiExportPatientLabel.fromDomain)
- )
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportTrialArm.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportTrialArm.scala
deleted file mode 100644
index ea96f58..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportTrialArm.scala
+++ /dev/null
@@ -1,27 +0,0 @@
-package xyz.driver.pdsuidomain.formats.json.export
-
-import play.api.libs.functional.syntax._
-import play.api.libs.json._
-import xyz.driver.pdsuicommon.domain.LongId
-import xyz.driver.pdsuidomain.entities.Arm
-import xyz.driver.pdsuidomain.entities.export.trial.ExportTrialArm
-
-final case class ApiExportTrialArm(armId: String, armName: String) {
-
- def toDomain: ExportTrialArm = {
- ExportTrialArm(LongId[Arm](armId.toLong), armName)
- }
-}
-
-object ApiExportTrialArm {
-
- implicit val format: Format[ApiExportTrialArm] = (
- (JsPath \ "armId").format[String] and
- (JsPath \ "armName").format[String]
- )(ApiExportTrialArm.apply, unlift(ApiExportTrialArm.unapply))
-
- def fromDomain(arm: ExportTrialArm) = ApiExportTrialArm(
- armId = arm.armId.toString,
- armName = arm.armName
- )
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportTrialLabelCriterion.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportTrialLabelCriterion.scala
deleted file mode 100644
index df1ebb4..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportTrialLabelCriterion.scala
+++ /dev/null
@@ -1,55 +0,0 @@
-package xyz.driver.pdsuidomain.formats.json.export
-
-import play.api.libs.functional.syntax._
-import play.api.libs.json._
-import xyz.driver.pdsuicommon.domain.{FuzzyValue, LongId}
-import xyz.driver.pdsuidomain.entities.export.trial.ExportTrialLabelCriterion
-import xyz.driver.pdsuidomain.entities.{Arm, Criterion, Label}
-
-final case class ApiExportTrialLabelCriterion(value: String,
- labelId: String,
- criterionId: String,
- criterionText: String,
- armIds: List[String],
- isCompound: Boolean,
- isDefining: Boolean) {
-
- def toDomain: ExportTrialLabelCriterion = {
- ExportTrialLabelCriterion(
- LongId[Criterion](criterionId.toLong),
- FuzzyValue.fromString.lift(value).map(_ == FuzzyValue.Yes),
- LongId[Label](labelId.toLong),
- armIds.map(armId => LongId[Arm](armId.toLong)).toSet,
- criterionText,
- isCompound,
- isDefining
- )
- }
-}
-
-object ApiExportTrialLabelCriterion {
-
- implicit val format: Format[ApiExportTrialLabelCriterion] = (
- (JsPath \ "value").format[String](Writes[String](x => JsString(x.toUpperCase))) and
- (JsPath \ "labelId").format[String] and
- (JsPath \ "criterionId").format[String] and
- (JsPath \ "criterionText").format[String] and
- (JsPath \ "armIds").format[List[String]] and
- (JsPath \ "isCompound").format[Boolean] and
- (JsPath \ "isDefining").format[Boolean]
- )(ApiExportTrialLabelCriterion.apply, unlift(ApiExportTrialLabelCriterion.unapply))
-
- def fromDomain(x: ExportTrialLabelCriterion) = ApiExportTrialLabelCriterion(
- value = x.value
- .map { x =>
- FuzzyValue.valueToString(FuzzyValue.fromBoolean(x))
- }
- .getOrElse("Unknown"),
- labelId = x.labelId.toString,
- criterionId = x.criterionId.toString,
- criterionText = x.criteria,
- armIds = x.armIds.map(_.toString).toList,
- isCompound = x.isCompound,
- isDefining = x.isDefining
- )
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportTrialWithLabels.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportTrialWithLabels.scala
deleted file mode 100644
index e383a1f..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/export/ApiExportTrialWithLabels.scala
+++ /dev/null
@@ -1,53 +0,0 @@
-package xyz.driver.pdsuidomain.formats.json.export
-
-import java.time.{Instant, ZoneId}
-
-import play.api.libs.functional.syntax._
-import play.api.libs.json.{Format, JsPath}
-import xyz.driver.pdsuicommon.domain.{StringId, UuidId}
-import xyz.driver.pdsuidomain.entities.Trial
-import xyz.driver.pdsuidomain.entities.export.trial.ExportTrialWithLabels
-
-final case class ApiExportTrialWithLabels(nctId: String,
- trialId: String,
- condition: String,
- lastReviewed: Long,
- labelVersion: Long,
- arms: List[ApiExportTrialArm],
- criteria: List[ApiExportTrialLabelCriterion]) {
-
- def toDomain: ExportTrialWithLabels = {
- ExportTrialWithLabels(
- StringId[Trial](nctId),
- UuidId[Trial](trialId),
- condition,
- lastReviewed = Instant.ofEpochMilli(lastReviewed).atZone(ZoneId.of("Z")).toLocalDateTime,
- labelVersion,
- arms.map(_.toDomain),
- criteria.map(_.toDomain)
- )
- }
-}
-
-object ApiExportTrialWithLabels {
-
- implicit val format: Format[ApiExportTrialWithLabels] = (
- (JsPath \ "nctId").format[String] and
- (JsPath \ "trialId").format[String] and
- (JsPath \ "disease").format[String] and
- (JsPath \ "lastReviewed").format[Long] and
- (JsPath \ "labelVersion").format[Long] and
- (JsPath \ "arms").format[List[ApiExportTrialArm]] and
- (JsPath \ "criteria").format[List[ApiExportTrialLabelCriterion]]
- )(ApiExportTrialWithLabels.apply, unlift(ApiExportTrialWithLabels.unapply))
-
- def fromDomain(x: ExportTrialWithLabels) = ApiExportTrialWithLabels(
- nctId = x.nctId.id,
- trialId = x.trialId.toString,
- condition = x.condition,
- lastReviewed = x.lastReviewed.atZone(ZoneId.of("Z")).toEpochSecond,
- labelVersion = x.labelVersion,
- arms = x.arms.map(ApiExportTrialArm.fromDomain),
- criteria = x.criteria.map(ApiExportTrialLabelCriterion.fromDomain)
- )
-}
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/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/intervention/ApiIntervention.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/intervention/ApiIntervention.scala
deleted file mode 100644
index 39acbde..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/intervention/ApiIntervention.scala
+++ /dev/null
@@ -1,72 +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],
- description: String,
- isActive: Boolean,
- arms: List[Long],
- 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 {
-
- implicit val format: Format[ApiIntervention] = (
- (JsPath \ "id").format[Long] and
- (JsPath \ "name").format[String] and
- (JsPath \ "typeId").formatNullable[Long] and
- (JsPath \ "description").format[String] and
- (JsPath \ "isActive").format[Boolean] and
- (JsPath \ "arms").format[List[Long]] and
- (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 = {
- import interventionWithArms.intervention
- import interventionWithArms.arms
-
- ApiIntervention(
- id = intervention.id.id,
- name = intervention.name,
- typeId = intervention.typeId.map(_.id),
- description = intervention.description,
- isActive = intervention.isActive,
- arms = arms.map(_.armId.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/intervention/ApiInterventionType.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/intervention/ApiInterventionType.scala
deleted file mode 100644
index ebef225..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/intervention/ApiInterventionType.scala
+++ /dev/null
@@ -1,24 +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.pdsuicommon.domain.LongId
-import xyz.driver.pdsuidomain.entities.InterventionType
-
-final case class ApiInterventionType(id: Long, name: String) {
-
- def toDomain = InterventionType(id = LongId[InterventionType](id), name = name)
-}
-
-object ApiInterventionType {
-
- implicit val format: Format[ApiInterventionType] = (
- (JsPath \ "id").format[Long] and
- (JsPath \ "name").format[String]
- )(ApiInterventionType.apply, unlift(ApiInterventionType.unapply))
-
- def fromDomain(interventionType: InterventionType) = ApiInterventionType(
- id = interventionType.id.id,
- name = interventionType.name
- )
-}
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 f67ba6b..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/intervention/ApiPartialIntervention.scala
+++ /dev/null
@@ -1,44 +0,0 @@
-package xyz.driver.pdsuidomain.formats.json.intervention
-
-import xyz.driver.pdsuicommon.domain.LongId
-import xyz.driver.pdsuidomain.entities.{InterventionArm, InterventionWithArms}
-import play.api.libs.functional.syntax._
-import play.api.libs.json._
-
-final case class ApiPartialIntervention(typeId: Option[Long],
- description: Option[String],
- isActive: Option[Boolean],
- arms: Option[List[Long]]) {
-
- def applyTo(orig: InterventionWithArms): InterventionWithArms = {
- val origIntervention = orig.intervention
- val draftArmList = arms.map(_.map(x => InterventionArm(LongId(x), orig.intervention.id)))
- orig.copy(
- intervention = origIntervention.copy(
- typeId = typeId.map(LongId(_)).orElse(origIntervention.typeId),
- description = description.getOrElse(origIntervention.description),
- isActive = isActive.getOrElse(origIntervention.isActive)
- ),
- arms = draftArmList.getOrElse(orig.arms)
- )
- }
-}
-
-object ApiPartialIntervention {
-
- private val reads: Reads[ApiPartialIntervention] = (
- (JsPath \ "typeId").readNullable[Long] and
- (JsPath \ "description").readNullable[String] and
- (JsPath \ "isActive").readNullable[Boolean] and
- (JsPath \ "arms").readNullable[List[Long]]
- )(ApiPartialIntervention.apply _)
-
- private val writes: Writes[ApiPartialIntervention] = (
- (JsPath \ "typeId").writeNullable[Long] and
- (JsPath \ "description").writeNullable[String] and
- (JsPath \ "isActive").writeNullable[Boolean] 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/keyword/ApiKeyword.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/keyword/ApiKeyword.scala
deleted file mode 100644
index a9d02fc..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/keyword/ApiKeyword.scala
+++ /dev/null
@@ -1,23 +0,0 @@
-package xyz.driver.pdsuidomain.formats.json.keyword
-
-import xyz.driver.pdsuidomain.entities.KeywordWithLabels
-import play.api.libs.functional.syntax._
-import play.api.libs.json.{Format, JsPath}
-import xyz.driver.pdsuidomain.formats.json.label.ApiLabel
-
-final case class ApiKeyword(id: Long, keyword: String, labels: List[ApiLabel])
-
-object ApiKeyword {
-
- implicit val format: Format[ApiKeyword] = (
- (JsPath \ "id").format[Long] and
- (JsPath \ "keyword").format[String] and
- (JsPath \ "labels").format[List[ApiLabel]]
- )(ApiKeyword.apply, unlift(ApiKeyword.unapply))
-
- def fromDomain(keywordWithLabels: KeywordWithLabels) = ApiKeyword(
- id = keywordWithLabels.keyword.id.id,
- keyword = keywordWithLabels.keyword.keyword,
- labels = keywordWithLabels.labels.map(x => ApiLabel(x.id.id, x.name, x.categoryId.id))
- )
-}
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 7a65af8..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/label/ApiCriterionLabel.scala
+++ /dev/null
@@ -1,53 +0,0 @@
-package xyz.driver.pdsuidomain.formats.json.label
-
-import xyz.driver.pdsuicommon.domain.{FuzzyValue, LongId}
-import xyz.driver.pdsuidomain.entities.{Category, Criterion, CriterionLabel, Label}
-import play.api.data.validation.ValidationError
-import play.api.libs.functional.syntax._
-import play.api.libs.json._
-
-/**
- * @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[Category]),
- 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 =>
- FuzzyValue.valueToString(FuzzyValue.fromBoolean(x))
- },
- 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 cb45025..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/label/ApiExtractedDataLabel.scala
+++ /dev/null
@@ -1,40 +0,0 @@
-package xyz.driver.pdsuidomain.formats.json.label
-
-import xyz.driver.pdsuicommon.domain.{FuzzyValue, LongId}
-import xyz.driver.pdsuidomain.entities.{Category, ExtractedData, ExtractedDataLabel, Label}
-import play.api.data.validation.ValidationError
-import play.api.libs.functional.syntax._
-import play.api.libs.json._
-
-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[Category]),
- value = value.map(FuzzyValue.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 FuzzyValue.fromString.isDefinedAt(x) => 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(FuzzyValue.valueToString)
- )
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/label/ApiLabel.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/label/ApiLabel.scala
deleted file mode 100644
index 042b380..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/label/ApiLabel.scala
+++ /dev/null
@@ -1,22 +0,0 @@
-package xyz.driver.pdsuidomain.formats.json.label
-
-import play.api.libs.functional.syntax._
-import play.api.libs.json.{Format, JsPath}
-import xyz.driver.pdsuidomain.entities.Label
-
-final case class ApiLabel(id: Long, name: String, categoryId: Long)
-
-object ApiLabel {
-
- implicit val format: Format[ApiLabel] = (
- (JsPath \ "id").format[Long] and
- (JsPath \ "name").format[String] and
- (JsPath \ "categoryId").format[Long]
- )(ApiLabel.apply, unlift(ApiLabel.unapply))
-
- def fromDomain(x: Label) = ApiLabel(
- id = x.id.id,
- name = x.name,
- categoryId = x.categoryId.id
- )
-}
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/patient/ApiPatient.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/ApiPatient.scala
deleted file mode 100644
index db430ae..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/ApiPatient.scala
+++ /dev/null
@@ -1,73 +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}
-
-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,
- condition: String,
- orderId: UUID) {
-
- private def extractStatus(status: String): Patient.Status =
- PatientStatus.statusFromString
- .applyOrElse(status, (s: String) => throw new NoSuchElementException(s"Unknown status $s"))
-
- def toDomain = Patient(
- id = UuidId(this.id),
- status = extractStatus(this.status),
- name = 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,
- condition = this.condition,
- 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 \ "condition").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,
- 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")),
- condition = patient.condition,
- 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 4136715..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.pdsuicommon.domain.FuzzyValue
-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 FuzzyValue.fromString.isDefinedAt(x) => 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(FuzzyValue.valueToString),
- 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 91d0a0e..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/label/ApiPartialPatientLabel.scala
+++ /dev/null
@@ -1,44 +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.pdsuicommon.domain.FuzzyValue
-
-final case class ApiPartialPatientLabel(primaryValue: Option[String], verifiedPrimaryValue: Tristate[String]) {
-
- def applyTo(orig: PatientLabel): PatientLabel = {
- orig.copy(
- primaryValue = primaryValue.map(FuzzyValue.fromString).orElse(orig.primaryValue),
- verifiedPrimaryValue =
- verifiedPrimaryValue.cata(x => Some(FuzzyValue.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 FuzzyValue.fromString.isDefinedAt(x) => true
- case _ => false
- }),
- Writes.of[String])) and
- (JsPath \ "verifiedPrimaryValue").formatTristate[String](
- Format(
- Reads
- .of[String]
- .filter(ValidationError("unknown verified primary value"))({
- case x if FuzzyValue.fromString.isDefinedAt(x) => 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 fc8687b..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/label/ApiPatientLabel.scala
+++ /dev/null
@@ -1,47 +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.pdsuicommon.domain.FuzzyValue
-
-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 FuzzyValue.fromString.isDefinedAt(x) => true
- case _ => false
- }), Writes.of[String])) and
- (JsPath \ "verifiedPrimaryValue").formatNullable[String](Format(Reads.of[String].filter(ValidationError("unknown value"))({
- case x if FuzzyValue.fromString.isDefinedAt(x) => 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(FuzzyValue.valueToString),
- verifiedPrimaryValue = patientLabel.verifiedPrimaryValue.map(FuzzyValue.valueToString),
- 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 ae64c33..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.pdsuicommon.domain.FuzzyValue
-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 FuzzyValue.fromString.isDefinedAt(x) => true
- case _ => false
- }),
- Writes.of[String]))
- )(ApiPatientLabelDefiningCriteria.apply, unlift(ApiPatientLabelDefiningCriteria.unapply))
-
- def fromDomain(x: PatientLabel) = ApiPatientLabelDefiningCriteria(
- labelId = x.labelId.id,
- value = x.verifiedPrimaryValue.map(FuzzyValue.valueToString)
- )
-}
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 399bc7d..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.pdsuicommon.domain.FuzzyValue
-
-final case class ApiPartialPatientCriterion(eligibilityStatus: Option[String],
- verifiedEligibilityStatus: Tristate[String]) {
-
- def applyTo(orig: PatientCriterion): PatientCriterion = {
- orig.copy(
- eligibilityStatus = eligibilityStatus.map(FuzzyValue.fromString).orElse(orig.eligibilityStatus),
- verifiedEligibilityStatus =
- verifiedEligibilityStatus.cata(x => Some(FuzzyValue.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 FuzzyValue.fromString.isDefinedAt(x) => true
- case _ => false
- }),
- Writes.of[String]
- )) and
- (JsPath \ "verifiedEligibilityStatus").formatTristate[String](
- Format(
- Reads
- .of[String]
- .filter(ValidationError("unknown verified eligibility status"))({
- case x if FuzzyValue.fromString.isDefinedAt(x) => 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 4b08970..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/trial/ApiPartialPatientCriterionList.scala
+++ /dev/null
@@ -1,36 +0,0 @@
-package xyz.driver.pdsuidomain.formats.json.patient.trial
-
-import xyz.driver.pdsuicommon.domain.{FuzzyValue, 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.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.map(FuzzyValue.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 FuzzyValue.fromString.isDefinedAt(x) => 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 75347f4..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/trial/ApiPatientCriterion.scala
+++ /dev/null
@@ -1,74 +0,0 @@
-package xyz.driver.pdsuidomain.formats.json.patient.trial
-
-import java.time.{ZoneId, ZonedDateTime}
-
-import xyz.driver.pdsuicommon.domain.{FuzzyValue, LongId}
-import xyz.driver.pdsuidomain.entities.{Label, PatientCriterion, PatientCriterionArm}
-import play.api.data.validation.ValidationError
-import play.api.libs.functional.syntax._
-import play.api.libs.json.{Format, JsPath, Reads, Writes}
-
-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 FuzzyValue.fromString.isDefinedAt(x) => true
- case _ => false
- }), Writes.of[String])) and
- (JsPath \ "verifiedEligibilityStatus").formatNullable[String](Format(
- Reads.of[String].filter(ValidationError("unknown status"))({
- case x if FuzzyValue.fromString.isDefinedAt(x) => 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 =>
- FuzzyValue.valueToString(FuzzyValue.fromBoolean(x))
- },
- criterionIsDefining = patientCriterion.criterionIsDefining,
- criterionIsCompound = patientCriterion.criterionValue.isEmpty,
- arms = arms.map(_.armName),
- eligibilityStatus = patientCriterion.eligibilityStatus.map(FuzzyValue.valueToString),
- verifiedEligibilityStatus = patientCriterion.verifiedEligibilityStatus.map(FuzzyValue.valueToString),
- 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/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/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/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/record/ApiCreateRecord.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/record/ApiCreateRecord.scala
deleted file mode 100644
index 2e5943e..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/record/ApiCreateRecord.scala
+++ /dev/null
@@ -1,34 +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,
- predictedMeta = None,
- predictedDocuments = None,
- lastUpdate = LocalDateTime.now()
- )
-}
-
-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 b255892..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/record/ApiRecord.scala
+++ /dev/null
@@ -1,100 +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}
-
-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 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)))
- )(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("[]")
- )
-}
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 47bc493..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/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/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/arm.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/arm.scala
deleted file mode 100644
index 39af1c3..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/arm.scala
+++ /dev/null
@@ -1,44 +0,0 @@
-package xyz.driver.pdsuidomain.formats.json.sprayformats
-
-import spray.json._
-import xyz.driver.pdsuicommon.domain.{LongId, StringId}
-import xyz.driver.pdsuidomain.entities._
-
-object arm {
- import DefaultJsonProtocol._
- import common._
-
- def applyUpdateToArm(json: JsValue, orig: Arm): Arm = json match {
- case JsObject(fields) =>
- val name = fields
- .get("name")
- .map(_.convertTo[String])
- .getOrElse(deserializationError(s"Arm json object does not contain `name` field: $json"))
- orig.copy(name = name)
-
- case _ => deserializationError(s"Expected Json Object as partial Arm, but got $json")
- }
-
- def armFormat: RootJsonFormat[Arm] = new RootJsonFormat[Arm] {
- override def write(obj: Arm): JsValue =
- JsObject(
- "id" -> obj.id.toJson,
- "name" -> obj.name.toJson,
- "originalName" -> obj.originalName.toJson,
- "trialId" -> obj.trialId.toJson
- )
-
- override def read(json: JsValue): Arm = json.asJsObject.getFields("trialId", "name") match {
- case Seq(trialId, name) =>
- Arm(
- id = LongId(0),
- name = name.convertTo[String],
- trialId = trialId.convertTo[StringId[Trial]],
- originalName = name.convertTo[String]
- )
-
- case _ => deserializationError(s"Expected Json Object as Arm, but got $json")
- }
- }
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/bridgeuploadqueue.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/bridgeuploadqueue.scala
deleted file mode 100644
index 77fb4d2..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/bridgeuploadqueue.scala
+++ /dev/null
@@ -1,68 +0,0 @@
-package xyz.driver.pdsuidomain.formats.json.sprayformats
-
-import java.time.LocalDateTime
-
-import spray.json._
-import xyz.driver.pdsuicommon.concurrent.BridgeUploadQueue
-import xyz.driver.pdsuicommon.concurrent.BridgeUploadQueue.Item
-
-object bridgeuploadqueue {
- import DefaultJsonProtocol._
- import common._
-
- implicit val queueUploadItemFormat: RootJsonFormat[BridgeUploadQueue.Item] = new RootJsonFormat[Item] {
- override def write(obj: Item) =
- JsObject(
- "kind" -> obj.kind.toJson,
- "tag" -> obj.tag.toJson,
- "created" -> obj.created.toJson,
- "attempts" -> obj.attempts.toJson,
- "nextAttempt" -> obj.nextAttempt.toJson,
- "completed" -> obj.completed.toJson
- )
-
- override def read(json: JsValue): Item = json match {
- case JsObject(fields) =>
- val kind = fields
- .get("kind")
- .map(_.convertTo[String])
- .getOrElse(deserializationError(s"BridgeUploadQueue.Item json object does not contain `kind` field: $json"))
-
- val tag = fields
- .get("tag")
- .map(_.convertTo[String])
- .getOrElse(deserializationError(s"BridgeUploadQueue.Item json object does not contain `tag` field: $json"))
-
- val created = fields
- .get("created")
- .map(_.convertTo[LocalDateTime])
- .getOrElse(
- deserializationError(s"BridgeUploadQueue.Item json object does not contain `created` field: $json"))
-
- val attempts = fields
- .get("attempts")
- .map(_.convertTo[Int])
- .getOrElse(
- deserializationError(s"BridgeUploadQueue.Item json object does not contain `attempts` field: $json"))
-
- val nextAttempt = fields
- .get("nextAttempt")
- .map(_.convertTo[LocalDateTime])
- .getOrElse(
- deserializationError(s"BridgeUploadQueue.Item json object does not contain `nextAttempt` field: $json"))
-
- BridgeUploadQueue.Item(
- kind = kind,
- tag = tag,
- created = created,
- attempts = attempts,
- nextAttempt = nextAttempt,
- completed = true,
- dependencyKind = None,
- dependencyTag = None
- )
-
- case _ => deserializationError(s"Expected Json Object as BridgeUploadQueue.Item, but got $json")
- }
- }
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/common.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/common.scala
deleted file mode 100644
index dbd0a43..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/common.scala
+++ /dev/null
@@ -1,74 +0,0 @@
-package xyz.driver.pdsuidomain.formats.json.sprayformats
-
-import java.time.{LocalDate, LocalDateTime, ZoneId, ZonedDateTime}
-
-import spray.json._
-import xyz.driver.pdsuicommon.domain.{FuzzyValue, LongId, StringId, UuidId}
-
-object common {
-
- implicit def longIdFormat[T] = new RootJsonFormat[LongId[T]] {
- override def write(id: LongId[T]): JsNumber = JsNumber(id.id)
- override def read(json: JsValue): LongId[T] = json match {
- case JsNumber(value) => LongId(value.toLong)
- case _ => deserializationError(s"Expected number as LongId, but got $json")
- }
- }
-
- implicit def stringIdFormat[T] = new RootJsonFormat[StringId[T]] {
- override def write(id: StringId[T]): JsString = JsString(id.toString)
- override def read(json: JsValue): StringId[T] = json match {
- case JsString(value) => StringId(value)
- case _ => deserializationError(s"Expected string as StringId, but got $json")
- }
- }
-
- implicit def uuidIdFormat[T] = new RootJsonFormat[UuidId[T]] {
- override def write(id: UuidId[T]): JsString = JsString(id.toString)
- override def read(json: JsValue): UuidId[T] = json match {
- case JsString(value) => UuidId(value)
- case _ => deserializationError(s"Expected string as UuidId, but got $json")
- }
- }
-
- implicit def dateTimeFormat = new RootJsonFormat[LocalDateTime] {
- override def write(date: LocalDateTime): JsString = JsString(ZonedDateTime.of(date, ZoneId.of("Z")).toString)
- override def read(json: JsValue): LocalDateTime = json match {
- case JsString(value) => ZonedDateTime.parse(value).toLocalDateTime
- case _ => deserializationError(s"Expected date as LocalDateTime, but got $json")
- }
- }
-
- implicit def zonedDateTimeFormat = new RootJsonFormat[ZonedDateTime] {
- override def write(date: ZonedDateTime): JsString = JsString(date.toString)
- override def read(json: JsValue): ZonedDateTime = json match {
- case JsString(value) => ZonedDateTime.parse(value)
- case _ => deserializationError(s"Expected date as ZonedDateTime, but got $json")
- }
- }
-
- implicit def dateFormat = new RootJsonFormat[LocalDate] {
- override def write(date: LocalDate): JsString = JsString(date.toString)
- override def read(json: JsValue): LocalDate = json match {
- case JsString(value) => LocalDate.parse(value)
- case _ => deserializationError(s"Expected date as LocalDate, but got $json")
- }
- }
-
- implicit def fuzzyValueFormat: RootJsonFormat[FuzzyValue] = new RootJsonFormat[FuzzyValue] {
- override def write(value: FuzzyValue): JsString = JsString(FuzzyValue.valueToString(value))
- override def read(json: JsValue): FuzzyValue = json match {
- case JsString(value) => FuzzyValue.fromString(value)
- case _ => deserializationError(s"Expected value as FuzzyValue, but got $json")
- }
- }
-
- implicit val integerFormat: RootJsonFormat[Integer] = new RootJsonFormat[Integer] {
- override def write(obj: Integer): JsNumber = JsNumber(obj.intValue())
- override def read(json: JsValue): Integer = json match {
- case JsNumber(value) => value.toInt
- case _ => deserializationError(s"Expected number as Integer, but got $json")
- }
- }
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/criterion.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/criterion.scala
deleted file mode 100644
index 732bcad..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/criterion.scala
+++ /dev/null
@@ -1,158 +0,0 @@
-package xyz.driver.pdsuidomain.formats.json.sprayformats
-
-import spray.json._
-import xyz.driver.pdsuicommon.domain.{LongId, StringId}
-import xyz.driver.pdsuidomain.entities._
-import xyz.driver.pdsuidomain.services.CriterionService.RichCriterion
-
-object criterion {
- import DefaultJsonProtocol._
- import common._
-
- implicit val criterionLabelWriter = new JsonWriter[CriterionLabel] {
- override def write(obj: CriterionLabel) = JsObject(
- "labelId" -> obj.labelId.toJson,
- "categoryId" -> obj.categoryId.toJson,
- "value" -> obj.value.map {
- case true => "Yes"
- case false => "No"
- }.toJson,
- "isDefining" -> obj.isDefining.toJson
- )
- }
-
- def jsValueToCriterionLabel(json: JsValue, criterionId: LongId[Criterion]): CriterionLabel = json match {
- case JsObject(fields) =>
- val labelId = fields
- .get("labelId")
- .map(_.convertTo[LongId[Label]])
-
- val categoryId = fields
- .get("categoryId")
- .map(_.convertTo[LongId[Category]])
-
- val value = fields
- .get("value")
- .map(_.convertTo[String] match {
- case "Yes" => true
- case "No" => false
- case other =>
- deserializationError(s"Unknown `value` of CriterionLabel object: expected `yes` or `no`, but got $other")
- })
-
- val isDefining = fields
- .get("isDefining")
- .map(_.convertTo[Boolean])
- .getOrElse(deserializationError(s"CriterionLabel json object does not contain `isDefining` field: $json"))
-
- CriterionLabel(
- id = LongId(0L),
- labelId = labelId,
- criterionId = criterionId,
- categoryId = categoryId,
- value = value,
- isDefining = isDefining
- )
-
- case _ => deserializationError(s"Expected Json Object as CriterionLabel, but got $json")
- }
-
- def applyUpdateToCriterion(json: JsValue, orig: RichCriterion): RichCriterion = json match {
- case JsObject(fields) =>
- val text = fields
- .get("text")
- .map(_.convertTo[String])
-
- val isCompound = fields
- .get("isCompound")
- .exists(_.convertTo[Boolean])
-
- val meta = fields
- .get("meta")
- .map(_.convertTo[Option[String]].getOrElse("{}"))
- .getOrElse(orig.criterion.meta)
-
- val arms = fields
- .get("arms")
- .map(_.convertTo[Option[List[LongId[Arm]]]].getOrElse(List.empty[LongId[Arm]]))
- .getOrElse(orig.armIds)
-
- val labels = fields
- .get("labels")
- .map(_.convertTo[Option[List[JsValue]]].getOrElse(List.empty[JsValue]))
- .map(_.map(l => jsValueToCriterionLabel(l, orig.criterion.id)))
- .getOrElse(orig.labels)
-
- orig.copy(
- criterion = orig.criterion.copy(
- meta = meta,
- text = text,
- isCompound = isCompound
- ),
- armIds = arms,
- labels = labels
- )
-
- case _ => deserializationError(s"Expected Json Object as partial Criterion, but got $json")
- }
-
- val richCriterionFormat = new RootJsonFormat[RichCriterion] {
- override def write(obj: RichCriterion): JsValue =
- JsObject(
- "id" -> obj.criterion.id.toJson,
- "meta" -> Option(obj.criterion.meta).toJson,
- "arms" -> obj.armIds.toJson,
- "text" -> obj.criterion.text.toJson,
- "isCompound" -> obj.criterion.isCompound.toJson,
- "labels" -> obj.labels.map(_.toJson).toJson,
- "trialId" -> obj.criterion.trialId.toJson
- )
-
- override def read(json: JsValue): RichCriterion = json match {
- case JsObject(fields) =>
- val trialId = fields
- .get("trialId")
- .map(_.convertTo[StringId[Trial]])
- .getOrElse(deserializationError(s"Criterion json object does not contain `trialId` field: $json"))
-
- val text = fields
- .get("text")
- .map(_.convertTo[String])
-
- val isCompound = fields
- .get("isCompound")
- .exists(_.convertTo[Boolean])
-
- val meta = fields
- .get("meta")
- .map(_.convertTo[String])
- .getOrElse("")
-
- val arms = fields
- .get("arms")
- .map(_.convertTo[List[LongId[Arm]]])
- .getOrElse(List.empty[LongId[Arm]])
-
- val labels = fields
- .get("labels")
- .map(_.convertTo[List[JsValue]])
- .map(_.map(l => jsValueToCriterionLabel(l, LongId(0))))
- .getOrElse(List.empty[CriterionLabel])
-
- RichCriterion(
- criterion = Criterion(
- id = LongId(0),
- trialId = trialId,
- text = text,
- isCompound = isCompound,
- meta = meta
- ),
- armIds = arms,
- labels = labels
- )
-
- case _ => deserializationError(s"Expected Json Object as Criterion, but got $json")
- }
- }
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/document.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/document.scala
deleted file mode 100644
index baf1b4e..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/document.scala
+++ /dev/null
@@ -1,164 +0,0 @@
-package xyz.driver.pdsuidomain.formats.json.sprayformats
-
-import java.time.{LocalDate, LocalDateTime}
-
-import spray.json._
-import xyz.driver.core.json.EnumJsonFormat
-import xyz.driver.pdsuicommon.domain.{LongId, TextJson}
-import xyz.driver.pdsuidomain.entities._
-
-object document {
- import DefaultJsonProtocol._
- import Document._
- import common._
-
- implicit val documentStatusFormat = new EnumJsonFormat[Status](
- "New" -> Status.New,
- "Organized" -> Status.Organized,
- "Extracted" -> Status.Extracted,
- "Done" -> Status.Done,
- "Flagged" -> Status.Flagged,
- "Archived" -> Status.Archived
- )
-
- implicit val requiredTypeFormat = new EnumJsonFormat[RequiredType](
- "OPN" -> RequiredType.OPN,
- "PN" -> RequiredType.PN
- )
-
- implicit val documentMetaFormat: RootJsonFormat[Meta] = jsonFormat3(Meta.apply)
-
- implicit val fullDocumentMetaFormat = new RootJsonFormat[TextJson[Meta]] {
- override def write(obj: TextJson[Meta]): JsValue = obj.content.toJson
- override def read(json: JsValue) = TextJson(documentMetaFormat.read(json))
- }
-
- def applyUpdateToDocument(json: JsValue, orig: Document): Document = json match {
- case JsObject(fields) =>
- val physician = fields
- .get("physician")
- .map(_.convertTo[String])
-
- val typeId = fields
- .get("typeId")
- .map(_.convertTo[Option[LongId[DocumentType]]])
- .getOrElse(orig.typeId)
-
- val provider = fields
- .get("provider")
- .map(_.convertTo[Option[String]])
- .getOrElse(orig.providerName)
-
- val providerTypeId = fields
- .get("providerTypeId")
- .map(_.convertTo[Option[LongId[ProviderType]]])
- .getOrElse(orig.providerTypeId)
-
- val meta = fields
- .get("meta")
- .map(_.convertTo[Option[TextJson[Meta]]])
- .getOrElse(orig.meta)
-
- val startDate = fields
- .get("startDate")
- .map(_.convertTo[Option[LocalDate]])
- .getOrElse(orig.startDate)
-
- val endDate = fields
- .get("endDate")
- .map(_.convertTo[Option[LocalDate]])
- .getOrElse(orig.endDate)
-
- orig.copy(
- physician = physician.orElse(orig.physician),
- typeId = typeId,
- providerName = provider,
- providerTypeId = providerTypeId,
- meta = meta,
- startDate = startDate,
- endDate = endDate
- )
-
- case _ => deserializationError(s"Expected Json Object as partial Document, but got $json")
- }
-
- implicit val documentFormat: RootJsonFormat[Document] = new RootJsonFormat[Document] {
- override def write(document: Document): JsValue =
- JsObject(
- "id" -> document.id.id.toJson,
- "recordId" -> document.recordId.toJson,
- "physician" -> document.physician.toJson,
- "typeId" -> document.typeId.toJson,
- "provider" -> document.providerName.toJson,
- "providerTypeId" -> document.providerTypeId.toJson,
- "requiredType" -> document.requiredType.toJson,
- "startDate" -> document.startDate.toJson,
- "endDate" -> document.endDate.toJson,
- "status" -> document.status.toJson,
- "previousStatus" -> document.previousStatus.toJson,
- "assignee" -> document.assignee.toJson,
- "previousAssignee" -> document.previousAssignee.toJson,
- "meta" -> document.meta.toJson,
- "lastActiveUser" -> document.lastActiveUserId.toJson,
- "lastUpdate" -> document.lastUpdate.toJson
- )
-
- override def read(json: JsValue): Document = json match {
- case JsObject(fields) =>
- val recordId = fields
- .get("recordId")
- .map(_.convertTo[LongId[MedicalRecord]])
- .getOrElse(deserializationError(s"Document create json object does not contain `recordId` field: $json"))
-
- val physician = fields
- .get("physician")
- .map(_.convertTo[String])
-
- val typeId = fields
- .get("typeId")
- .map(_.convertTo[LongId[DocumentType]])
-
- val provider = fields
- .get("provider")
- .map(_.convertTo[String])
-
- val providerTypeId = fields
- .get("providerTypeId")
- .map(_.convertTo[LongId[ProviderType]])
-
- val meta = fields
- .get("meta")
- .map(_.convertTo[TextJson[Meta]])
-
- val startDate = fields
- .get("startDate")
- .map(_.convertTo[LocalDate])
-
- val endDate = fields
- .get("endDate")
- .map(_.convertTo[LocalDate])
-
- Document(
- id = LongId(0),
- recordId = recordId,
- status = Document.Status.New,
- physician = physician,
- typeId = typeId,
- startDate = startDate,
- endDate = endDate,
- providerName = provider,
- providerTypeId = providerTypeId,
- requiredType = None,
- meta = meta,
- previousStatus = None,
- assignee = None,
- previousAssignee = None,
- lastActiveUserId = None,
- lastUpdate = LocalDateTime.MIN
- )
-
- case _ => deserializationError(s"Expected Json Object as Document, but got $json")
- }
- }
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/documenthistory.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/documenthistory.scala
deleted file mode 100644
index 419c252..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/documenthistory.scala
+++ /dev/null
@@ -1,29 +0,0 @@
-package xyz.driver.pdsuidomain.formats.json.sprayformats
-
-import spray.json._
-import xyz.driver.core.json.EnumJsonFormat
-import xyz.driver.pdsuidomain.entities._
-
-object documenthistory {
- import DefaultJsonProtocol._
- import common._
- import DocumentHistory._
-
- implicit val documentStateFormat = new EnumJsonFormat[State](
- "Extract" -> State.Extract,
- "Review" -> State.Review,
- "Flag" -> State.Flag
- )
-
- implicit val documentActionFormat = new EnumJsonFormat[Action](
- "Start" -> Action.Start,
- "Submit" -> Action.Submit,
- "Unassign" -> Action.Unassign,
- "Resolve" -> Action.Resolve,
- "Flag" -> Action.Flag,
- "Archive" -> Action.Archive
- )
-
- implicit val documentHistoryFormat: RootJsonFormat[DocumentHistory] = jsonFormat6(DocumentHistory.apply)
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/documentissue.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/documentissue.scala
deleted file mode 100644
index 28b2a5e..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/documentissue.scala
+++ /dev/null
@@ -1,77 +0,0 @@
-package xyz.driver.pdsuidomain.formats.json.sprayformats
-
-import java.time.LocalDateTime
-
-import spray.json._
-import xyz.driver.pdsuicommon.domain.{LongId, StringId, User}
-import xyz.driver.pdsuidomain.entities._
-
-object documentissue {
- import DefaultJsonProtocol._
- import common._
-
- def applyUpdateToDocumentIssue(json: JsValue, orig: DocumentIssue): DocumentIssue = json match {
- case JsObject(fields) =>
- val text = fields
- .get("text")
- .map(_.convertTo[String])
- .getOrElse(deserializationError(s"DocumentIssue json object does not contain `text` field: $json"))
-
- val archiveRequired = fields
- .get("archiveRequired")
- .map(_.convertTo[Boolean])
- .getOrElse(deserializationError(s"DocumentIssue json object does not contain `archiveRequired` field: $json"))
-
- val startPage = fields.get("startPage").map(_.convertTo[Double])
- val endPage = fields.get("endPage").map(_.convertTo[Double])
-
- orig.copy(
- text = text,
- archiveRequired = archiveRequired,
- startPage = startPage,
- endPage = endPage
- )
-
- case _ => deserializationError(s"Expected Json Object as partial DocumentIssue, but got $json")
-
- }
-
- def jsValueToDocumentIssue(json: JsValue, documentId: LongId[Document], userId: StringId[User]): DocumentIssue =
- json match {
- case JsObject(fields) =>
- val text = fields
- .get("text")
- .map(_.convertTo[String])
- .getOrElse(deserializationError(s"DocumentIssue json object does not contain `text` field: $json"))
-
- val startPage = fields.get("startPage").map(_.convertTo[Double])
- val endPage = fields.get("endPage").map(_.convertTo[Double])
- DocumentIssue(
- id = LongId(0),
- userId = userId,
- documentId = documentId,
- lastUpdate = LocalDateTime.MIN,
- isDraft = true,
- text = text,
- archiveRequired = false,
- startPage = startPage,
- endPage = endPage
- )
-
- case _ => deserializationError(s"Expected Json Object as DocumentIssue, but got $json")
- }
-
- implicit val documentIssueWriter = new JsonWriter[DocumentIssue] {
- override def write(obj: DocumentIssue) = JsObject(
- "id" -> obj.id.toJson,
- "startPage" -> obj.startPage.toJson,
- "endPage" -> obj.endPage.toJson,
- "text" -> obj.text.toJson,
- "lastUpdate" -> obj.lastUpdate.toJson,
- "userId" -> obj.userId.toJson,
- "isDraft" -> obj.isDraft.toJson,
- "archiveRequired" -> obj.archiveRequired.toJson
- )
- }
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/export.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/export.scala
deleted file mode 100644
index 20b6ed0..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/export.scala
+++ /dev/null
@@ -1,78 +0,0 @@
-package xyz.driver.pdsuidomain.formats.json.sprayformats
-
-import spray.json._
-import xyz.driver.pdsuidomain.entities.export.patient._
-import xyz.driver.pdsuidomain.entities.export.trial.{ExportTrialArm, ExportTrialLabelCriterion, ExportTrialWithLabels}
-
-object export {
- import DefaultJsonProtocol._
- import common._
- import record._
-
- implicit val patientLabelEvidenceDocumentFormat: RootJsonFormat[ExportPatientLabelEvidenceDocument] = jsonFormat5(
- ExportPatientLabelEvidenceDocument.apply)
-
- implicit val patientLabelEvidenceWriter: JsonWriter[ExportPatientLabelEvidence] =
- new JsonWriter[ExportPatientLabelEvidence] {
- override def write(obj: ExportPatientLabelEvidence): JsValue =
- JsObject(
- "evidenceId" -> obj.id.toJson,
- "labelValue" -> obj.value.toJson,
- "evidenceText" -> obj.evidenceText.toJson,
- "document" -> obj.document.toJson
- )
- }
-
- implicit val patientLabelWriter: JsonWriter[ExportPatientLabel] = new JsonWriter[ExportPatientLabel] {
- override def write(obj: ExportPatientLabel): JsValue =
- JsObject(
- "labelId" -> obj.id.toJson,
- "evidence" -> obj.evidences.map(_.toJson).toJson
- )
- }
-
- implicit val patientWithLabelsWriter: JsonWriter[ExportPatientWithLabels] = new JsonWriter[ExportPatientWithLabels] {
- override def write(obj: ExportPatientWithLabels): JsValue =
- JsObject(
- "patientId" -> obj.patientId.toJson,
- "labelVersion" -> obj.labelVersion.toJson,
- "labels" -> obj.labels.map(_.toJson).toJson
- )
- }
-
- implicit val trialArmFormat: RootJsonFormat[ExportTrialArm] = jsonFormat2(ExportTrialArm.apply)
-
- implicit val trialLabelCriterionWriter: JsonWriter[ExportTrialLabelCriterion] =
- new JsonWriter[ExportTrialLabelCriterion] {
- override def write(obj: ExportTrialLabelCriterion): JsValue =
- JsObject(
- "value" -> obj.value
- .map {
- case true => "Yes"
- case false => "No"
- }
- .getOrElse("Unknown")
- .toJson,
- "labelId" -> obj.labelId.toJson,
- "criterionId" -> obj.criterionId.toJson,
- "criterionText" -> obj.criteria.toJson,
- "armIds" -> obj.armIds.toJson,
- "isCompound" -> obj.isCompound.toJson,
- "isDefining" -> obj.isDefining.toJson
- )
- }
-
- implicit val trialWithLabelsWriter: JsonWriter[ExportTrialWithLabels] = new JsonWriter[ExportTrialWithLabels] {
- override def write(obj: ExportTrialWithLabels) =
- JsObject(
- "nctId" -> obj.nctId.toJson,
- "trialId" -> obj.trialId.toJson,
- "disease" -> obj.condition.toJson,
- "lastReviewed" -> obj.lastReviewed.toJson,
- "labelVersion" -> obj.labelVersion.toJson,
- "arms" -> obj.arms.toJson,
- "criteria" -> obj.criteria.map(_.toJson).toJson
- )
- }
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/extracteddata.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/extracteddata.scala
deleted file mode 100644
index 42473bc..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/extracteddata.scala
+++ /dev/null
@@ -1,148 +0,0 @@
-package xyz.driver.pdsuidomain.formats.json.sprayformats
-
-import spray.json._
-import xyz.driver.pdsuicommon.domain.{FuzzyValue, LongId, TextJson}
-import xyz.driver.pdsuidomain.entities._
-import xyz.driver.pdsuidomain.services.ExtractedDataService.RichExtractedData
-
-object extracteddata {
- import DefaultJsonProtocol._
- import common._
- import ExtractedData._
-
- implicit val metaKeywordFormat: RootJsonFormat[Meta.Keyword] = jsonFormat4(Meta.Keyword)
- implicit val metaTextLayerPositionFormat: RootJsonFormat[Meta.TextLayerPosition] = jsonFormat3(
- Meta.TextLayerPosition)
- implicit val metaEvidenceFormat: RootJsonFormat[Meta.Evidence] = jsonFormat3(Meta.Evidence)
-
- implicit val extractedDataMetaFormat: RootJsonFormat[Meta] = jsonFormat2(Meta.apply)
- implicit val fullExtractedDataMetaFormat = new RootJsonFormat[TextJson[Meta]] {
- override def write(obj: TextJson[Meta]): JsValue = obj.content.toJson
- override def read(json: JsValue): TextJson[Meta] = TextJson(extractedDataMetaFormat.read(json))
- }
-
- implicit val extractedDataLabelWriter: JsonWriter[ExtractedDataLabel] = new JsonWriter[ExtractedDataLabel] {
- override def write(label: ExtractedDataLabel): JsObject = {
- JsObject(
- "id" -> label.labelId.toJson,
- "categoryId" -> label.categoryId.toJson,
- "value" -> label.value.toJson
- )
- }
- }
-
- def applyLabelsForExtractedData(json: JsValue, dataId: LongId[ExtractedData]): ExtractedDataLabel = json match {
- case JsObject(fields) =>
- val labelId = fields
- .get("id")
- .map(_.convertTo[LongId[Label]])
-
- val categoryId = fields
- .get("categoryId")
- .map(_.convertTo[LongId[Category]])
-
- val value = fields
- .get("value")
- .map(_.convertTo[FuzzyValue])
-
- ExtractedDataLabel(
- id = LongId(0),
- dataId = dataId,
- labelId = labelId,
- categoryId = categoryId,
- value = value
- )
-
- case _ => deserializationError(s"Expected Json Object as ExtractedDataLabel, but got $json")
- }
-
- def applyUpdateToExtractedData(json: JsValue, orig: RichExtractedData): RichExtractedData = json match {
- case JsObject(fields) =>
- val keywordId = fields
- .get("keywordId")
- .map(_.convertTo[Option[LongId[Keyword]]])
- .getOrElse(orig.extractedData.keywordId)
-
- val evidence = fields
- .get("evidence")
- .map(_.convertTo[Option[String]])
- .getOrElse(orig.extractedData.evidenceText)
-
- val meta = fields
- .get("meta")
- .map(_.convertTo[Option[TextJson[Meta]]])
- .getOrElse(orig.extractedData.meta)
-
- val labels = fields
- .get("labels")
- .map(
- _.convertTo[Option[List[JsValue]]]
- .getOrElse(List.empty[JsValue])
- .map(l => applyLabelsForExtractedData(l, orig.extractedData.id)))
- .getOrElse(orig.labels)
-
- val extractedData = orig.extractedData.copy(
- keywordId = keywordId,
- evidenceText = evidence,
- meta = meta
- )
-
- orig.copy(
- extractedData = extractedData,
- labels = labels
- )
-
- case _ => deserializationError(s"Expected Json Object as partial ExtractedData, but got $json")
- }
-
- implicit val extractedDataFormat: RootJsonFormat[RichExtractedData] = new RootJsonFormat[RichExtractedData] {
- override def write(richData: RichExtractedData): JsValue =
- JsObject(
- "id" -> richData.extractedData.id.id.toJson,
- "documentId" -> richData.extractedData.documentId.toJson,
- "keywordId" -> richData.extractedData.keywordId.toJson,
- "evidence" -> richData.extractedData.evidenceText.toJson,
- "meta" -> richData.extractedData.meta.toJson,
- "labels" -> richData.labels.map(_.toJson).toJson
- )
-
- override def read(json: JsValue): RichExtractedData = json match {
- case JsObject(fields) =>
- val documentId = fields
- .get("documentId")
- .map(_.convertTo[LongId[Document]])
- .getOrElse(
- deserializationError(s"ExtractedData create json object does not contain `documentId` field: $json"))
-
- val keywordId = fields
- .get("keywordId")
- .map(_.convertTo[LongId[Keyword]])
-
- val evidence = fields
- .get("evidence")
- .map(_.convertTo[String])
-
- val meta = fields
- .get("meta")
- .map(_.convertTo[TextJson[Meta]])
-
- val labels = fields
- .get("labels")
- .map(_.convertTo[List[JsValue]])
- .getOrElse(List.empty[JsValue])
- .map(l => applyLabelsForExtractedData(l, LongId(0)))
-
- val extractedData = ExtractedData(
- documentId = documentId,
- keywordId = keywordId,
- evidenceText = evidence,
- meta = meta
- )
-
- RichExtractedData(extractedData, labels)
-
- case _ => deserializationError(s"Expected Json Object as ExtractedData, but got $json")
- }
- }
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/hypothesis.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/hypothesis.scala
deleted file mode 100644
index c05ff23..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/hypothesis.scala
+++ /dev/null
@@ -1,12 +0,0 @@
-package xyz.driver.pdsuidomain.formats.json.sprayformats
-
-import spray.json._
-import xyz.driver.pdsuidomain.entities._
-
-object hypothesis {
- import DefaultJsonProtocol._
- import common._
-
- implicit val hypothesisFormat: RootJsonFormat[Hypothesis] = jsonFormat4(Hypothesis.apply)
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/intervention.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/intervention.scala
deleted file mode 100644
index a8ce950..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/intervention.scala
+++ /dev/null
@@ -1,60 +0,0 @@
-package xyz.driver.pdsuidomain.formats.json.sprayformats
-
-import spray.json._
-import xyz.driver.pdsuicommon.domain.LongId
-import xyz.driver.pdsuidomain.entities._
-
-object intervention {
- import DefaultJsonProtocol._
- import common._
-
- implicit val interventionWriter: JsonWriter[InterventionWithArms] = new JsonWriter[InterventionWithArms] {
- override def write(obj: InterventionWithArms) =
- JsObject(
- "id" -> obj.intervention.id.toJson,
- "name" -> obj.intervention.name.toJson,
- "typeId" -> obj.intervention.typeId.toJson,
- "description" -> obj.intervention.description.toJson,
- "isActive" -> obj.intervention.isActive.toJson,
- "arms" -> obj.arms.map(_.armId).toJson,
- "trialId" -> obj.intervention.trialId.toJson,
- "originalName" -> obj.intervention.originalName.toJson,
- "originalDescription" -> obj.intervention.originalDescription.toJson,
- "originalType" -> obj.intervention.originalType.toJson
- )
- }
-
- def applyUpdateToInterventionWithArms(json: JsValue, orig: InterventionWithArms): InterventionWithArms = json match {
- case JsObject(fields) =>
- val typeId = fields
- .get("typeId")
- .map(_.convertTo[LongId[InterventionType]])
-
- val description = fields
- .get("description")
- .map(_.convertTo[String])
-
- val isActive = fields
- .get("isActive")
- .map(_.convertTo[Boolean])
-
- val origIntervention = orig.intervention
- val arms = fields
- .get("arms")
- .map(_.convertTo[List[LongId[Arm]]].map(x => InterventionArm(x, orig.intervention.id)))
-
- orig.copy(
- intervention = origIntervention.copy(
- typeId = typeId.orElse(origIntervention.typeId),
- description = description.getOrElse(origIntervention.description),
- isActive = isActive.getOrElse(origIntervention.isActive)
- ),
- arms = arms.getOrElse(orig.arms)
- )
-
- case _ => deserializationError(s"Expected Json Object as partial Intervention, but got $json")
- }
-
- implicit val interventionTypeFormat: RootJsonFormat[InterventionType] = jsonFormat2(InterventionType.apply)
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patient.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patient.scala
deleted file mode 100644
index 724c391..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patient.scala
+++ /dev/null
@@ -1,46 +0,0 @@
-package xyz.driver.pdsuidomain.formats.json.sprayformats
-
-import spray.json._
-import xyz.driver.core.json.EnumJsonFormat
-import xyz.driver.pdsuidomain.entities._
-
-object patient {
- import DefaultJsonProtocol._
- import common._
- import Patient._
-
- implicit val patientStatusFormat = new EnumJsonFormat[Status](
- "New" -> Status.New,
- "Verified" -> Status.Verified,
- "Reviewed" -> Status.Reviewed,
- "Curated" -> Status.Curated,
- "Done" -> Status.Done,
- "Flagged" -> Status.Flagged
- )
-
- implicit val patientOrderIdFormat = new RootJsonFormat[PatientOrderId] {
- override def write(orderId: PatientOrderId): JsString = JsString(orderId.toString)
- override def read(json: JsValue): PatientOrderId = json match {
- case JsString(value) => PatientOrderId(value)
- case _ => deserializationError(s"Expected string as PatientOrderId, but got $json")
- }
- }
-
- implicit val patientWriter: JsonWriter[Patient] = new JsonWriter[Patient] {
- override def write(patient: Patient): JsValue =
- JsObject(
- "id" -> patient.id.toJson,
- "status" -> patient.status.toJson,
- "name" -> patient.name.toJson,
- "dob" -> patient.dob.toJson,
- "assignee" -> patient.assignee.toJson,
- "previousStatus" -> patient.previousStatus.toJson,
- "previousAssignee" -> patient.previousAssignee.toJson,
- "lastActiveUser" -> patient.lastActiveUserId.toJson,
- "lastUpdate" -> patient.lastUpdate.toJson,
- "condition" -> patient.condition.toJson,
- "orderId" -> patient.orderId.toJson
- )
- }
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientcriterion.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientcriterion.scala
deleted file mode 100644
index 53e927d..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientcriterion.scala
+++ /dev/null
@@ -1,68 +0,0 @@
-package xyz.driver.pdsuidomain.formats.json.sprayformats
-
-import spray.json._
-import xyz.driver.pdsuicommon.domain.{FuzzyValue, LongId}
-import xyz.driver.pdsuidomain.entities._
-import xyz.driver.pdsuidomain.services.PatientCriterionService.DraftPatientCriterion
-
-object patientcriterion {
- import DefaultJsonProtocol._
- import common._
-
- def applyUpdateToPatientCriterion(json: JsValue, orig: PatientCriterion): PatientCriterion = json match {
- case JsObject(fields) =>
- val eligibilityStatus = if (fields.contains("eligibilityStatus")) {
- fields
- .get("eligibilityStatus")
- .map(_.convertTo[FuzzyValue])
- } else orig.eligibilityStatus
-
- val verifiedEligibilityStatus = if (fields.contains("verifiedEligibilityStatus")) {
- fields
- .get("verifiedEligibilityStatus")
- .map(_.convertTo[FuzzyValue])
- } else orig.verifiedEligibilityStatus
-
- orig.copy(
- eligibilityStatus = eligibilityStatus,
- verifiedEligibilityStatus = verifiedEligibilityStatus
- )
-
- case _ => deserializationError(s"Expected Json Object as partial PatientCriterion, but got $json")
- }
-
- implicit val draftPatientCriterionFormat: RootJsonFormat[DraftPatientCriterion] = jsonFormat3(
- DraftPatientCriterion.apply)
- implicit val draftPatientCriterionListReader = new JsonReader[List[DraftPatientCriterion]] {
- override def read(json: JsValue) = json.convertTo[List[JsValue]].map(_.convertTo[DraftPatientCriterion])
- }
-
- implicit val patientCriterionWriter: JsonWriter[(PatientCriterion, LongId[Label], List[PatientCriterionArm])] =
- new JsonWriter[(PatientCriterion, LongId[Label], List[PatientCriterionArm])] {
- override def write(obj: (PatientCriterion, LongId[Label], List[PatientCriterionArm])): JsValue = {
- val criterion = obj._1
- val labelId = obj._2
- val arms = obj._3
- JsObject(
- "id" -> criterion.id.toJson,
- "labelId" -> labelId.toJson,
- "nctId" -> criterion.nctId.toJson,
- "criterionId" -> criterion.criterionId.toJson,
- "criterionText" -> criterion.criterionText.toJson,
- "criterionValue" -> criterion.criterionValue.map {
- case true => "Yes"
- case false => "No"
- }.toJson,
- "criterionIsDefining" -> criterion.criterionIsDefining.toJson,
- "criterionIsCompound" -> criterion.criterionValue.isEmpty.toJson,
- "arms" -> arms.map(_.armName).toJson,
- "eligibilityStatus" -> criterion.eligibilityStatus.toJson,
- "verifiedEligibilityStatus" -> criterion.verifiedEligibilityStatus.toJson,
- "isVerified" -> criterion.isVerified.toJson,
- "isVisible" -> criterion.isVisible.toJson,
- "lastUpdate" -> criterion.lastUpdate.toJson
- )
- }
- }
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientdefiningcriteria.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientdefiningcriteria.scala
deleted file mode 100644
index b97570a..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientdefiningcriteria.scala
+++ /dev/null
@@ -1,18 +0,0 @@
-package xyz.driver.pdsuidomain.formats.json.sprayformats
-
-import spray.json._
-import xyz.driver.pdsuidomain.entities.PatientLabel
-
-object patientdefiningcriteria {
- import DefaultJsonProtocol._
- import common._
-
- implicit val patientLabelDefiningCriteriaWriter: JsonWriter[PatientLabel] = new JsonWriter[PatientLabel] {
- override def write(obj: PatientLabel) =
- JsObject(
- "id" -> obj.id.toJson,
- "value" -> obj.verifiedPrimaryValue.toJson
- )
- }
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patienteligibletrial.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patienteligibletrial.scala
deleted file mode 100644
index 894e453..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patienteligibletrial.scala
+++ /dev/null
@@ -1,39 +0,0 @@
-package xyz.driver.pdsuidomain.formats.json.sprayformats
-
-import spray.json._
-import xyz.driver.pdsuidomain.entities._
-import xyz.driver.pdsuidomain.services.PatientEligibleTrialService.RichPatientEligibleTrial
-
-object patienteligibletrial {
- import DefaultJsonProtocol._
- import common._
-
- def applyUpdateToTrialArmGroup(json: JsValue, orig: PatientTrialArmGroupView): PatientTrialArmGroupView =
- json match {
- case JsObject(fields) =>
- val isVerified = fields
- .get("isVerified")
- .map(_.convertTo[Boolean])
- .getOrElse(orig.isVerified)
-
- orig.copy(isVerified = isVerified)
-
- case _ => deserializationError(s"Expected Json Object as partial PatientTrialArmGroupView, but got $json")
- }
-
- implicit val patientEligibleTrialWriter: JsonWriter[RichPatientEligibleTrial] =
- new JsonWriter[RichPatientEligibleTrial] {
- override def write(obj: RichPatientEligibleTrial) =
- JsObject(
- "id" -> obj.group.id.toJson,
- "patientId" -> obj.group.patientId.toJson,
- "trialId" -> obj.group.trialId.toJson,
- "trialTitle" -> obj.trial.title.toJson,
- "arms" -> obj.arms.map(_.armName).toJson,
- "hypothesisId" -> obj.trial.hypothesisId.toJson,
- "verifiedEligibilityStatus" -> obj.group.verifiedEligibilityStatus.toJson,
- "isVerified" -> obj.group.isVerified.toJson
- )
- }
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patienthistory.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patienthistory.scala
deleted file mode 100644
index da7a664..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patienthistory.scala
+++ /dev/null
@@ -1,30 +0,0 @@
-package xyz.driver.pdsuidomain.formats.json.sprayformats
-
-import spray.json._
-import xyz.driver.core.json.EnumJsonFormat
-import xyz.driver.pdsuidomain.entities._
-
-object patienthistory {
- import DefaultJsonProtocol._
- import common._
- import PatientHistory._
-
- implicit val patientStateFormat = new EnumJsonFormat[State](
- "Verify" -> State.Verify,
- "Curate" -> State.Curate,
- "Review" -> State.Review,
- "Flag" -> State.Flag
- )
-
- implicit val patientActionFormat = new EnumJsonFormat[Action](
- "Start" -> Action.Start,
- "Submit" -> Action.Submit,
- "Unassign" -> Action.Unassign,
- "Resolve" -> Action.Resolve,
- "Flag" -> Action.Flag,
- "Archive" -> Action.Archive
- )
-
- implicit val patientHistoryFormat: RootJsonFormat[PatientHistory] = jsonFormat6(PatientHistory.apply)
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patienthypothesis.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patienthypothesis.scala
deleted file mode 100644
index 4f2783c..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patienthypothesis.scala
+++ /dev/null
@@ -1,37 +0,0 @@
-package xyz.driver.pdsuidomain.formats.json.sprayformats
-
-import spray.json._
-import xyz.driver.pdsuidomain.entities._
-
-object patienthypothesis {
- import DefaultJsonProtocol._
- import common._
-
- def applyUpdateToPatientHypothesis(json: JsValue, orig: PatientHypothesis): PatientHypothesis = json match {
- case JsObject(fields) =>
- val rationale = if (fields.contains("rationale")) {
- fields.get("rationale").map(_.convertTo[String])
- } else orig.rationale
-
- orig.copy(rationale = rationale)
-
- case _ => deserializationError(s"Expected Json Object as partial PatientHypothesis, but got $json")
- }
-
- implicit val patientHypothesisWriter: JsonWriter[(PatientHypothesis, Boolean)] =
- new JsonWriter[(PatientHypothesis, Boolean)] {
- override def write(obj: (PatientHypothesis, Boolean)): JsValue = {
- val patientHypothesis = obj._1
- val isRationaleRequired = obj._2
- JsObject(
- "id" -> patientHypothesis.id.toJson,
- "patientId" -> patientHypothesis.patientId.toJson,
- "hypothesisId" -> patientHypothesis.hypothesisId.toJson,
- "matchedTrials" -> patientHypothesis.matchedTrials.toJson,
- "rationale" -> patientHypothesis.rationale.toJson,
- "isRationaleRequired" -> isRationaleRequired.toJson
- )
- }
- }
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientissue.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientissue.scala
deleted file mode 100644
index 7d35bd1..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientissue.scala
+++ /dev/null
@@ -1,54 +0,0 @@
-package xyz.driver.pdsuidomain.formats.json.sprayformats
-
-import java.time.LocalDateTime
-
-import spray.json._
-import xyz.driver.pdsuicommon.domain.{LongId, StringId, User, UuidId}
-import xyz.driver.pdsuidomain.entities._
-
-object patientissue {
- import DefaultJsonProtocol._
- import common._
-
- def applyUpdateToPatientIssue(json: JsValue, orig: PatientIssue): PatientIssue = {
- json.asJsObject.getFields("text", "archiveRequired") match {
- case Seq(text, archiveRequired) =>
- orig.copy(
- text = text.convertTo[String],
- archiveRequired = archiveRequired.convertTo[Boolean]
- )
-
- case _ => deserializationError(s"Expected Json Object as partial PatientIssue, but got $json")
- }
- }
-
- def jsValueToPatientIssue(json: JsValue, patientId: UuidId[Patient], userId: StringId[User]): PatientIssue = {
- json.asJsObject.getFields("text") match {
- case Seq(text) =>
- PatientIssue(
- id = LongId(0),
- userId = userId,
- patientId = patientId,
- lastUpdate = LocalDateTime.MIN,
- isDraft = true,
- text = text.convertTo[String],
- archiveRequired = false
- )
-
- case _ => deserializationError(s"Expected Json Object as PatientIssue, but got $json")
- }
-
- }
-
- implicit val patientIssueWriter = new JsonWriter[PatientIssue] {
- override def write(obj: PatientIssue) = JsObject(
- "id" -> obj.id.toJson,
- "text" -> obj.text.toJson,
- "lastUpdate" -> obj.lastUpdate.toJson,
- "userId" -> obj.userId.toJson,
- "isDraft" -> obj.isDraft.toJson,
- "archiveRequired" -> obj.archiveRequired.toJson
- )
- }
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientlabel.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientlabel.scala
deleted file mode 100644
index 3b52833..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientlabel.scala
+++ /dev/null
@@ -1,64 +0,0 @@
-package xyz.driver.pdsuidomain.formats.json.sprayformats
-
-import spray.json._
-import xyz.driver.pdsuicommon.domain.FuzzyValue
-import xyz.driver.pdsuidomain.entities._
-
-object patientlabel {
- import DefaultJsonProtocol._
- import common._
-
- def applyUpdateToPatientLabel(json: JsValue, orig: PatientLabel): PatientLabel = json match {
- case JsObject(fields) =>
- val primaryValue = fields
- .get("primaryValue")
- .map(_.convertTo[Option[FuzzyValue]])
- .getOrElse(orig.primaryValue)
-
- val verifiedPrimaryValue = fields
- .get("verifiedPrimaryValue")
- .map(_.convertTo[Option[FuzzyValue]])
- .getOrElse(orig.verifiedPrimaryValue)
-
- orig.copy(
- primaryValue = primaryValue,
- verifiedPrimaryValue = verifiedPrimaryValue
- )
-
- case _ => deserializationError(s"Expected Json Object as PatientLabel, but got $json")
- }
-
- implicit val patientLabelWriter: JsonWriter[(PatientLabel, Boolean)] = new JsonWriter[(PatientLabel, Boolean)] {
- override def write(obj: (PatientLabel, Boolean)): JsValue = {
- val patientLabel = obj._1
- val isVerified = obj._2
- JsObject(
- "id" -> patientLabel.id.toJson,
- "labelId" -> patientLabel.labelId.toJson,
- "primaryValue" -> patientLabel.primaryValue.toJson,
- "verifiedPrimaryValue" -> patientLabel.verifiedPrimaryValue.toJson,
- "score" -> patientLabel.score.toJson,
- "isImplicitMatch" -> patientLabel.isImplicitMatch.toJson,
- "isVisible" -> patientLabel.isVisible.toJson,
- "isVerified" -> isVerified.toJson
- )
- }
- }
-
- implicit val patientLabelEvidenceWriter: JsonWriter[PatientLabelEvidenceView] =
- new JsonWriter[PatientLabelEvidenceView] {
- override def write(evidence: PatientLabelEvidenceView): JsValue =
- JsObject(
- "id" -> evidence.id.toJson,
- "value" -> evidence.value.toJson,
- "evidenceText" -> evidence.evidenceText.toJson,
- "documentId" -> evidence.documentId.toJson,
- "evidenceId" -> evidence.evidenceId.toJson,
- "reportId" -> evidence.reportId.toJson,
- "documentType" -> evidence.documentType.toJson,
- "date" -> evidence.date.toJson,
- "providerType" -> evidence.providerType.toJson
- )
- }
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/record.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/record.scala
deleted file mode 100644
index e378dbd..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/record.scala
+++ /dev/null
@@ -1,237 +0,0 @@
-package xyz.driver.pdsuidomain.formats.json.sprayformats
-
-import java.time.LocalDateTime
-import java.util.UUID
-
-import spray.json._
-import xyz.driver.core.json.{EnumJsonFormat, GadtJsonFormat}
-import xyz.driver.pdsuicommon.domain.{LongId, TextJson, UuidId}
-import xyz.driver.pdsuidomain.entities.MedicalRecord.Meta._
-import xyz.driver.pdsuidomain.entities._
-
-object record {
- import DefaultJsonProtocol._
- import MedicalRecord._
- import common._
-
- implicit val recordStatusFormat = new EnumJsonFormat[Status](
- "Unprocessed" -> Status.Unprocessed,
- "PreOrganized" -> Status.PreOrganized,
- "New" -> Status.New,
- "Cleaned" -> Status.Cleaned,
- "PreOrganized" -> Status.PreOrganized,
- "PreOrganizing" -> Status.PreOrganizing,
- "Reviewed" -> Status.Reviewed,
- "Organized" -> Status.Organized,
- "Done" -> Status.Done,
- "Flagged" -> Status.Flagged,
- "Archived" -> Status.Archived
- )
-
- implicit val requestIdFormat = new RootJsonFormat[RecordRequestId] {
- override def write(requestId: RecordRequestId): JsString = JsString(requestId.toString)
- override def read(json: JsValue): RecordRequestId = json match {
- case JsString(value) => RecordRequestId(UUID.fromString(value))
- case _ => deserializationError(s"Expected string as RecordRequestId, but got $json")
- }
- }
-
- implicit val caseIdFormat = new RootJsonFormat[CaseId] {
- override def write(caseId: CaseId): JsString = JsString(caseId.toString)
- override def read(json: JsValue): CaseId = json match {
- case JsString(value) => CaseId(value)
- case _ => deserializationError(s"Expected string as CaseId, but got $json")
- }
- }
-
- implicit val duplicateMetaFormat: RootJsonFormat[Duplicate] = new RootJsonFormat[Duplicate] {
- override def write(obj: Duplicate) =
- JsObject(
- "type" -> "duplicate".toJson,
- "predicted" -> obj.predicted.toJson,
- "startPage" -> obj.startPage.toJson,
- "endPage" -> obj.endPage.toJson,
- "startOriginalPage" -> obj.startOriginalPage.toJson,
- "endOriginalPage" -> obj.endOriginalPage.toJson
- )
-
- override def read(json: JsValue): Duplicate = json match {
- case JsObject(fields) =>
- val predicted = fields
- .get("predicted")
- .map(_.convertTo[Boolean])
-
- val startPage = fields
- .get("startPage")
- .map(_.convertTo[Double])
- .getOrElse(deserializationError(s"Duplicate meta json object does not contain `startPage` field: $json"))
-
- val endPage = fields
- .get("endPage")
- .map(_.convertTo[Double])
- .getOrElse(deserializationError(s"Duplicate meta json object does not contain `endPage` field: $json"))
-
- val startOriginalPage = fields
- .get("startOriginalPage")
- .map(_.convertTo[Double])
- .getOrElse(
- deserializationError(s"Duplicate meta json object does not contain `startOriginalPage` field: $json"))
-
- val endOriginalPage = fields
- .get("endOriginalPage")
- .map(_.convertTo[Double])
-
- Duplicate(
- predicted = predicted,
- startPage = startPage,
- endPage = endPage,
- startOriginalPage = startOriginalPage,
- endOriginalPage = endOriginalPage
- )
-
- case _ => deserializationError(s"Expected JsObject as Duplicate meta of medical record, but got $json")
- }
- }
-
- implicit val reorderMetaFormat: RootJsonFormat[Reorder] = new RootJsonFormat[Reorder] {
- override def write(obj: Reorder) =
- JsObject(
- "type" -> "reorder".toJson,
- "predicted" -> obj.predicted.toJson,
- "items" -> obj.items.toJson
- )
-
- override def read(json: JsValue): Reorder = json match {
- case JsObject(fields) =>
- val predicted = fields
- .get("predicted")
- .map(_.convertTo[Boolean])
-
- val items = fields
- .get("items")
- .map(_.convertTo[Seq[Int]])
- .getOrElse(deserializationError(s"Reorder meta json object does not contain `items` field: $json"))
-
- Reorder(
- predicted = predicted,
- items = items
- )
-
- case _ => deserializationError(s"Expected JsObject as Reorder meta of medical record, but got $json")
- }
- }
-
- implicit val rotateMetaFormat: RootJsonFormat[Rotation] = new RootJsonFormat[Rotation] {
- override def write(obj: Rotation) =
- JsObject(
- "type" -> "rotation".toJson,
- "predicted" -> obj.predicted.toJson,
- "items" -> obj.items.toJson
- )
-
- override def read(json: JsValue): Rotation = json match {
- case JsObject(fields) =>
- val predicted = fields
- .get("predicted")
- .map(_.convertTo[Boolean])
-
- val items = fields
- .get("items")
- .map(_.convertTo[Map[String, Int]])
- .getOrElse(deserializationError(s"Rotation meta json object does not contain `items` field: $json"))
-
- Rotation(
- predicted = predicted,
- items = items
- )
-
- case _ => deserializationError(s"Expected JsObject as Rotation meta of medical record, but got $json")
- }
- }
-
- implicit val recordMetaTypeFormat: GadtJsonFormat[MedicalRecord.Meta] = {
- GadtJsonFormat.create[Meta]("type")({ case m => m.metaType }) {
- case "duplicate" => duplicateMetaFormat
- case "reorder" => reorderMetaFormat
- case "rotation" => rotateMetaFormat
- }
- }
-
- implicit val recordMetaFormat = new RootJsonFormat[TextJson[List[Meta]]] {
- override def write(obj: TextJson[List[Meta]]): JsArray = JsArray(obj.content.map(_.toJson).toVector)
- override def read(json: JsValue): TextJson[List[Meta]] = json match {
- case JsArray(values) => TextJson[List[Meta]](values.map(_.convertTo[Meta]).toList)
- case _ => deserializationError(s"Expected array as Meta, but got $json")
- }
- }
-
- implicit val recordFormat: RootJsonFormat[MedicalRecord] =
- new RootJsonFormat[MedicalRecord] {
- override def write(record: MedicalRecord): JsValue =
- JsObject(
- "id" -> record.id.id.toJson,
- "patientId" -> record.patientId.toJson,
- "caseId" -> record.caseId.toJson,
- "disease" -> record.disease.toJson,
- "physician" -> record.physician.toJson,
- "status" -> record.status.toJson,
- "previousStatus" -> record.previousStatus.toJson,
- "assignee" -> record.assignee.toJson,
- "previousAssignee" -> record.previousAssignee.toJson,
- "requestId" -> record.requestId.toJson,
- "meta" -> record.meta.getOrElse(TextJson[List[Meta]](List.empty)).toJson,
- "lastActiveUser" -> record.lastActiveUserId.toJson,
- "lastUpdate" -> record.lastUpdate.toJson
- )
-
- override def read(json: JsValue): MedicalRecord = json match {
- case JsObject(fields) =>
- val disease = fields
- .get("disease")
- .map(_.convertTo[String])
- .getOrElse(deserializationError(s"MedicalRecord json object does not contain `disease` field: $json"))
-
- val patientId = fields
- .get("patientId")
- .map(_.convertTo[UuidId[Patient]])
- .getOrElse(deserializationError(s"MedicalRecord json object does not contain `patientId` field: $json"))
-
- val requestId = fields
- .get("requestId")
- .map(_.convertTo[RecordRequestId])
- .getOrElse(deserializationError(s"MedicalRecord json object does not contain `requestId` field: $json"))
-
- MedicalRecord(
- id = LongId(0),
- status = MedicalRecord.Status.New,
- previousStatus = None,
- assignee = None,
- previousAssignee = None,
- lastActiveUserId = None,
- patientId = patientId,
- requestId = requestId,
- disease = disease,
- caseId = None,
- physician = None,
- meta = None,
- predictedMeta = None,
- predictedDocuments = None,
- lastUpdate = LocalDateTime.now()
- )
-
- case _ => deserializationError(s"Expected Json Object as MedicalRecord, but got $json")
- }
- }
-
- def applyUpdateToMedicalRecord(json: JsValue, orig: MedicalRecord): MedicalRecord = json match {
- case JsObject(fields) =>
- val meta = fields
- .get("meta")
- .map(_.convertTo[Option[TextJson[List[Meta]]]])
- .getOrElse(orig.meta)
- orig.copy(meta = meta)
-
- case _ => deserializationError(s"Expected Json Object as partial MedicalRecord, but got $json")
- }
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/recordhistory.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/recordhistory.scala
deleted file mode 100644
index bd14d43..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/recordhistory.scala
+++ /dev/null
@@ -1,30 +0,0 @@
-package xyz.driver.pdsuidomain.formats.json.sprayformats
-
-import spray.json._
-import xyz.driver.core.json.EnumJsonFormat
-import xyz.driver.pdsuidomain.entities._
-
-object recordhistory {
- import DefaultJsonProtocol._
- import common._
- import MedicalRecordHistory._
-
- implicit val recordStateFormat = new EnumJsonFormat[State](
- "Clean" -> State.Clean,
- "Organize" -> State.Organize,
- "Review" -> State.Review,
- "Flag" -> State.Flag
- )
-
- implicit val recordActionFormat = new EnumJsonFormat[Action](
- "Start" -> Action.Start,
- "Submit" -> Action.Submit,
- "Unassign" -> Action.Unassign,
- "Resolve" -> Action.Resolve,
- "Flag" -> Action.Flag,
- "Archive" -> Action.Archive
- )
-
- implicit val recordHistoryFormat: RootJsonFormat[MedicalRecordHistory] = jsonFormat6(MedicalRecordHistory.apply)
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/recordissue.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/recordissue.scala
deleted file mode 100644
index 4ae04d0..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/recordissue.scala
+++ /dev/null
@@ -1,79 +0,0 @@
-package xyz.driver.pdsuidomain.formats.json.sprayformats
-
-import java.time.LocalDateTime
-
-import spray.json._
-import xyz.driver.pdsuicommon.domain.{LongId, StringId, User}
-import xyz.driver.pdsuidomain.entities._
-
-object recordissue {
- import DefaultJsonProtocol._
- import common._
-
- def applyUpdateToRecordIssue(json: JsValue, orig: MedicalRecordIssue): MedicalRecordIssue = json match {
- case JsObject(fields) =>
- val text = fields
- .get("text")
- .map(_.convertTo[String])
- .getOrElse(deserializationError(s"MedicalRecordIssue json object does not contain `text` field: $json"))
-
- val archiveRequired = fields
- .get("archiveRequired")
- .map(_.convertTo[Boolean])
- .getOrElse(
- deserializationError(s"MedicalRecordIssue json object does not contain `archiveRequired` field: $json"))
-
- val startPage = fields.get("startPage").map(_.convertTo[Double])
- val endPage = fields.get("endPage").map(_.convertTo[Double])
-
- orig.copy(
- text = text,
- archiveRequired = archiveRequired,
- startPage = startPage,
- endPage = endPage
- )
-
- case _ => deserializationError(s"Expected Json Object as partial MedicalRecordIssue, but got $json")
-
- }
-
- def jsValueToRecordIssue(json: JsValue,
- recordId: LongId[MedicalRecord],
- userId: StringId[User]): MedicalRecordIssue = json match {
- case JsObject(fields) =>
- val text = fields
- .get("text")
- .map(_.convertTo[String])
- .getOrElse(deserializationError(s"MedicalRecordIssue json object does not contain `text` field: $json"))
-
- val startPage = fields.get("startPage").map(_.convertTo[Double])
- val endPage = fields.get("endPage").map(_.convertTo[Double])
- MedicalRecordIssue(
- id = LongId(0),
- userId = userId,
- recordId = recordId,
- lastUpdate = LocalDateTime.MIN,
- isDraft = true,
- text = text,
- archiveRequired = false,
- startPage = startPage,
- endPage = endPage
- )
-
- case _ => deserializationError(s"Expected Json Object as MedicalRecordIssue, but got $json")
- }
-
- implicit val recordIssueWriter = new JsonWriter[MedicalRecordIssue] {
- override def write(obj: MedicalRecordIssue) = JsObject(
- "id" -> obj.id.toJson,
- "startPage" -> obj.startPage.toJson,
- "endPage" -> obj.endPage.toJson,
- "text" -> obj.text.toJson,
- "lastUpdate" -> obj.lastUpdate.toJson,
- "userId" -> obj.userId.toJson,
- "isDraft" -> obj.isDraft.toJson,
- "archiveRequired" -> obj.archiveRequired.toJson
- )
- }
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/studydesign.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/studydesign.scala
deleted file mode 100644
index e801666..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/studydesign.scala
+++ /dev/null
@@ -1,12 +0,0 @@
-package xyz.driver.pdsuidomain.formats.json.sprayformats
-
-import spray.json._
-import xyz.driver.pdsuidomain.entities._
-
-object studydesign {
- import DefaultJsonProtocol._
- import common._
-
- implicit val studyDesignFormat: RootJsonFormat[StudyDesign] = jsonFormat2(StudyDesign.apply)
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/trial.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/trial.scala
deleted file mode 100644
index c1751bf..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/trial.scala
+++ /dev/null
@@ -1,90 +0,0 @@
-package xyz.driver.pdsuidomain.formats.json.sprayformats
-
-import java.time.{ZoneId, ZonedDateTime}
-
-import spray.json._
-import xyz.driver.core.json.EnumJsonFormat
-import xyz.driver.pdsuicommon.domain.{LongId, UuidId}
-import xyz.driver.pdsuidomain.entities._
-
-object trial {
- import DefaultJsonProtocol._
- import common._
- import Trial._
-
- implicit val trialStatusFormat = new EnumJsonFormat[Status](
- "New" -> Status.New,
- "ReviewSummary" -> Status.ReviewSummary,
- "Summarized" -> Status.Summarized,
- "PendingUpdate" -> Status.PendingUpdate,
- "Update" -> Status.Update,
- "ReviewCriteria" -> Status.ReviewCriteria,
- "Done" -> Status.Done,
- "Flagged" -> Status.Flagged,
- "Archived" -> Status.Archived
- )
-
- implicit val conditionFormat = new EnumJsonFormat[Condition](
- "Breast" -> Condition.Breast,
- "Lung" -> Condition.Lung,
- "Prostate" -> Condition.Prostate
- )
-
- implicit val trialWriter: JsonWriter[Trial] = new JsonWriter[Trial] {
- override def write(obj: Trial) =
- JsObject(
- "id" -> obj.id.toJson,
- "externalid" -> obj.externalId.toJson,
- "lastUpdate" -> ZonedDateTime.of(obj.lastUpdate, ZoneId.of("Z")).toJson,
- "status" -> obj.status.toJson,
- "assignee" -> obj.assignee.toJson,
- "previousStatus" -> obj.previousStatus.toJson,
- "previousAssignee" -> obj.previousAssignee.toJson,
- "lastActiveUser" -> obj.lastActiveUserId.toJson,
- "condition" -> obj.condition.toJson,
- "phase" -> obj.phase.toJson,
- "hypothesisId" -> obj.hypothesisId.toJson,
- "studyDesignId" -> obj.studyDesignId.toJson,
- "originalStudyDesignId" -> obj.originalStudyDesign.toJson,
- "isPartner" -> obj.isPartner.toJson,
- "overview" -> obj.overview.toJson,
- "overviewTemplate" -> obj.overviewTemplate.toJson,
- "isUpdated" -> obj.isUpdated.toJson,
- "title" -> obj.title.toJson,
- "originalTitle" -> obj.originalTitle.toJson
- )
- }
-
- def applyUpdateToTrial(json: JsValue, orig: Trial): Trial = json match {
- case JsObject(fields) =>
- val hypothesisId = fields
- .get("hypothesisId")
- .map(_.convertTo[Option[UuidId[Hypothesis]]])
- .getOrElse(orig.hypothesisId)
-
- val studyDesignId = fields
- .get("studyDesignId")
- .map(_.convertTo[Option[LongId[StudyDesign]]])
- .getOrElse(orig.studyDesignId)
-
- val overview = fields
- .get("overview")
- .map(_.convertTo[Option[String]])
- .getOrElse(orig.overview)
-
- val title = fields
- .get("title")
- .map(_.convertTo[Option[String]].getOrElse(""))
- .getOrElse(orig.title)
-
- orig.copy(
- hypothesisId = hypothesisId,
- studyDesignId = studyDesignId,
- overview = overview,
- title = title
- )
-
- case _ => deserializationError(s"Expected Json Object as Trial, but got $json")
- }
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/trialhistory.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/trialhistory.scala
deleted file mode 100644
index 844c5f5..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/trialhistory.scala
+++ /dev/null
@@ -1,30 +0,0 @@
-package xyz.driver.pdsuidomain.formats.json.sprayformats
-
-import spray.json._
-import xyz.driver.core.json.EnumJsonFormat
-import xyz.driver.pdsuidomain.entities._
-
-object trialhistory {
- import DefaultJsonProtocol._
- import common._
- import TrialHistory._
-
- implicit val trialStateFormat = new EnumJsonFormat[State](
- "Summarize" -> State.Summarize,
- "Criteriarize" -> State.Criteriarize,
- "Review" -> State.Review,
- "Flag" -> State.Flag
- )
-
- implicit val trialActionFormat = new EnumJsonFormat[Action](
- "Start" -> Action.Start,
- "Submit" -> Action.Submit,
- "Unassign" -> Action.Unassign,
- "Resolve" -> Action.Resolve,
- "Flag" -> Action.Flag,
- "Archive" -> Action.Archive
- )
-
- implicit val trialHistoryFormat: RootJsonFormat[TrialHistory] = jsonFormat6(TrialHistory.apply)
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/trialissue.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/trialissue.scala
deleted file mode 100644
index 572f44d..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/trialissue.scala
+++ /dev/null
@@ -1,60 +0,0 @@
-package xyz.driver.pdsuidomain.formats.json.sprayformats
-
-import java.time.LocalDateTime
-
-import spray.json._
-import xyz.driver.pdsuicommon.domain.{LongId, StringId, User}
-import xyz.driver.pdsuidomain.entities._
-
-object trialissue {
- import DefaultJsonProtocol._
- import common._
-
- def applyUpdateToTrialIssue(json: JsValue, orig: TrialIssue): TrialIssue = {
- json.asJsObject.getFields("text", "evidence", "archiveRequired", "meta") match {
- case Seq(text, evidence, archiveRequired, meta) =>
- orig.copy(
- text = text.convertTo[String],
- evidence = evidence.convertTo[String],
- archiveRequired = archiveRequired.convertTo[Boolean],
- meta = meta.convertTo[String]
- )
-
- case _ => deserializationError(s"Expected Json Object as partial TrialIssue, but got $json")
- }
- }
-
- def jsValueToTrialIssue(json: JsValue, trialId: StringId[Trial], userId: StringId[User]): TrialIssue = {
- json.asJsObject.getFields("text", "evidence", "meta") match {
- case Seq(text, evidence, meta) =>
- TrialIssue(
- id = LongId(0),
- userId = userId,
- trialId = trialId,
- lastUpdate = LocalDateTime.MIN,
- isDraft = true,
- text = text.convertTo[String],
- evidence = evidence.convertTo[String],
- archiveRequired = false,
- meta = meta.convertTo[String]
- )
-
- case _ => deserializationError(s"Expected Json Object as TrialIssue, but got $json")
- }
-
- }
-
- implicit val trialIssueWriter = new JsonWriter[TrialIssue] {
- override def write(obj: TrialIssue) = JsObject(
- "id" -> obj.id.toJson,
- "text" -> obj.text.toJson,
- "lastUpdate" -> obj.lastUpdate.toJson,
- "userId" -> obj.userId.toJson,
- "isDraft" -> obj.isDraft.toJson,
- "evidence" -> obj.evidence.toJson,
- "archiveRequired" -> obj.archiveRequired.toJson,
- "meta" -> obj.meta.toJson
- )
- }
-
-}
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 1e9a226..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/studydesign/ApiStudyDesign.scala
+++ /dev/null
@@ -1,24 +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}
-import xyz.driver.pdsuicommon.domain.LongId
-
-final case class ApiStudyDesign(id: Long, name: String) {
-
- def toDomain = StudyDesign(id = LongId[StudyDesign](id), name = 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/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 1b4ac64..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/trial/ApiTrial.scala
+++ /dev/null
@@ -1,104 +0,0 @@
-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,
- externalId: UUID,
- lastUpdate: ZonedDateTime,
- status: String,
- assignee: Option[String],
- previousStatus: Option[String],
- previousAssignee: Option[String],
- lastActiveUser: 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,
- 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)
- .getOrElse(
- throw new NoSuchElementException(s"unknown condition ${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 \ "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").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] 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")),
- 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,
- 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/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/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"))
- )
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/ArmService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/ArmService.scala
deleted file mode 100644
index 1f907c8..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/ArmService.scala
+++ /dev/null
@@ -1,124 +0,0 @@
-package xyz.driver.pdsuidomain.services
-
-import xyz.driver.pdsuicommon.auth.AuthenticatedRequestContext
-import xyz.driver.pdsuicommon.db._
-import xyz.driver.pdsuicommon.domain.LongId
-import xyz.driver.pdsuicommon.error.DomainError
-import xyz.driver.pdsuicommon.logging._
-import xyz.driver.pdsuidomain.entities.Arm
-
-import scala.concurrent.Future
-
-object ArmService {
-
- trait DefaultAccessDeniedError {
- def userMessage: String = "Access denied"
- }
-
- trait DefaultNotFoundError {
- def userMessage: String = "Arm not found"
- }
-
- sealed trait GetByIdReply
- object GetByIdReply {
-
- final case class Entity(x: Arm) extends GetByIdReply
-
- type Error = GetByIdReply with DomainError
-
- case object NotFoundError extends GetByIdReply with DefaultNotFoundError with DomainError.NotFoundError
-
- case object AuthorizationError
- extends GetByIdReply with DomainError.AuthorizationError with DefaultAccessDeniedError
-
- final case class CommonError(userMessage: String)(implicit requestContext: AuthenticatedRequestContext)
- extends GetByIdReply with DomainError
- }
-
- sealed trait GetListReply
- object GetListReply {
- type Error = GetListReply with DomainError
-
- final case class EntityList(xs: Seq[Arm], totalFound: Int) extends GetListReply
-
- case object AuthorizationError
- extends GetListReply with DomainError.AuthorizationError with DefaultAccessDeniedError
- }
-
- sealed trait UpdateReply
- object UpdateReply {
-
- final case class Updated(updated: Arm) extends UpdateReply
-
- type Error = UpdateReply with DomainError
-
- case object NotFoundError extends UpdateReply with DefaultNotFoundError with DomainError.NotFoundError
-
- case object AuthorizationError
- extends UpdateReply with DefaultAccessDeniedError with DomainError.AuthorizationError
-
- final case class CommonError(userMessage: String) extends UpdateReply with DomainError
-
- final case class AlreadyExistsError(x: Arm) extends UpdateReply with DomainError {
- val userMessage = s"The arm with such name of trial already exists."
- }
-
- implicit def toPhiString(reply: UpdateReply): PhiString = reply match {
- case Updated(x) => phi"Updated($x)"
- case x: Error => DomainError.toPhiString(x)
- }
- }
-
- sealed trait CreateReply
- object CreateReply {
- final case class Created(x: Arm) extends CreateReply
-
- type Error = CreateReply with DomainError
-
- case object AuthorizationError
- extends CreateReply with DefaultAccessDeniedError with DomainError.AuthorizationError
-
- final case class CommonError(userMessage: String) extends CreateReply with DomainError
-
- final case class AlreadyExistsError(x: Arm) extends CreateReply with DomainError {
- val userMessage = s"The arm with this name of trial already exists."
- }
-
- implicit def toPhiString(reply: CreateReply): PhiString = reply match {
- case Created(x) => phi"Created($x)"
- case x: Error => DomainError.toPhiString(x)
- }
- }
-
- sealed trait DeleteReply
- object DeleteReply {
- case object Deleted extends DeleteReply
-
- type Error = DeleteReply with DomainError
-
- case object NotFoundError extends DeleteReply with DefaultNotFoundError with DomainError.NotFoundError
-
- case object AuthorizationError
- extends DeleteReply with DefaultAccessDeniedError with DomainError.AuthorizationError
-
- final case class CommonError(userMessage: String) extends DeleteReply with DomainError
- }
-}
-
-trait ArmService {
-
- import ArmService._
-
- def getAll(filter: SearchFilterExpr = SearchFilterExpr.Empty,
- sorting: Option[Sorting] = None,
- pagination: Option[Pagination] = None)(
- implicit requestContext: AuthenticatedRequestContext): Future[GetListReply]
-
- def getById(armId: LongId[Arm])(implicit requestContext: AuthenticatedRequestContext): Future[GetByIdReply]
-
- def create(draftArm: Arm)(implicit requestContext: AuthenticatedRequestContext): Future[CreateReply]
-
- def update(origArm: Arm, draftArm: Arm)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply]
-
- def delete(id: LongId[Arm])(implicit requestContext: AuthenticatedRequestContext): Future[DeleteReply]
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/CriterionService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/CriterionService.scala
deleted file mode 100644
index fd9268b..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/CriterionService.scala
+++ /dev/null
@@ -1,120 +0,0 @@
-package xyz.driver.pdsuidomain.services
-
-import java.time.LocalDateTime
-
-import xyz.driver.pdsuicommon.auth.AuthenticatedRequestContext
-import xyz.driver.pdsuicommon.db._
-import xyz.driver.pdsuicommon.domain.LongId
-import xyz.driver.pdsuicommon.error.DomainError
-import xyz.driver.pdsuicommon.logging._
-import xyz.driver.pdsuidomain.entities._
-
-import scala.concurrent.Future
-
-object CriterionService {
-
- trait DefaultNotFoundError {
- def userMessage: String = "Criterion not found"
- }
-
- trait DefaultAccessDeniedError {
- def userMessage: String = "Access denied"
- }
-
- final case class RichCriterion(criterion: Criterion, armIds: Seq[LongId[Arm]], labels: Seq[CriterionLabel])
- object RichCriterion {
- implicit def toPhiString(x: RichCriterion): PhiString = {
- import x._
- phi"RichCriterion(criterion=$criterion, armIds=$armIds, labels=$labels)"
- }
- }
-
- sealed trait CreateReply
- object CreateReply {
- type Error = CreateReply with DomainError
-
- final case class Created(x: RichCriterion) extends CreateReply
-
- case object AuthorizationError
- extends CreateReply with DomainError.AuthorizationError with DefaultAccessDeniedError
-
- final case class CommonError(userMessage: String) extends CreateReply with DomainError
- }
-
- sealed trait GetByIdReply
- object GetByIdReply {
- final case class Entity(x: RichCriterion) extends GetByIdReply
-
- type Error = GetByIdReply with DomainError
-
- case object NotFoundError extends GetByIdReply with DefaultNotFoundError with DomainError.NotFoundError
-
- case object AuthorizationError
- extends GetByIdReply with DomainError.AuthorizationError with DefaultAccessDeniedError
-
- final case class CommonError(userMessage: String)(implicit requestContext: AuthenticatedRequestContext)
- extends GetByIdReply with DomainError
-
- implicit def toPhiString(reply: GetByIdReply): PhiString = reply match {
- case x: DomainError => phi"GetByIdReply.Error($x)"
- case Entity(x) => phi"GetByIdReply.Entity($x)"
- }
- }
-
- sealed trait GetListReply
- object GetListReply {
- final case class EntityList(xs: Seq[RichCriterion], totalFound: Int, lastUpdate: Option[LocalDateTime])
- extends GetListReply
-
- case object AuthorizationError
- extends GetListReply with DomainError.AuthorizationError with DefaultAccessDeniedError
- }
-
- sealed trait UpdateReply
- object UpdateReply {
- type Error = UpdateReply with DomainError
-
- final case class Updated(updated: RichCriterion) extends UpdateReply
-
- case object NotFoundError extends UpdateReply with DefaultNotFoundError with DomainError.NotFoundError
-
- case object AuthorizationError
- extends UpdateReply with DefaultAccessDeniedError with DomainError.AuthorizationError
-
- final case class CommonError(userMessage: String) extends UpdateReply with DomainError
- }
-
- sealed trait DeleteReply
- object DeleteReply {
- case object Deleted extends DeleteReply
-
- type Error = DeleteReply with DomainError
-
- case object NotFoundError extends DeleteReply with DefaultNotFoundError with DomainError.NotFoundError
-
- case object AuthorizationError
- extends DeleteReply with DefaultAccessDeniedError with DomainError.AuthorizationError
-
- final case class CommonError(userMessage: String) extends DeleteReply with DomainError
- }
-}
-
-trait CriterionService {
-
- import CriterionService._
-
- def create(draftRichCriterion: RichCriterion)(
- implicit requestContext: AuthenticatedRequestContext): Future[CreateReply]
-
- def getById(id: LongId[Criterion])(implicit requestContext: AuthenticatedRequestContext): Future[GetByIdReply]
-
- def getAll(filter: SearchFilterExpr = SearchFilterExpr.Empty,
- sorting: Option[Sorting] = None,
- pagination: Option[Pagination] = None)(
- implicit requestContext: AuthenticatedRequestContext): Future[GetListReply]
-
- def update(origRichCriterion: RichCriterion, draftRichCriterion: RichCriterion)(
- implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply]
-
- def delete(id: LongId[Criterion])(implicit requestContext: AuthenticatedRequestContext): Future[DeleteReply]
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/DocumentHistoryService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/DocumentHistoryService.scala
deleted file mode 100644
index 2d9679d..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/DocumentHistoryService.scala
+++ /dev/null
@@ -1,44 +0,0 @@
-package xyz.driver.pdsuidomain.services
-
-import java.time.LocalDateTime
-
-import xyz.driver.pdsuicommon.auth.AuthenticatedRequestContext
-import xyz.driver.pdsuicommon.db.{Pagination, SearchFilterExpr, Sorting}
-import xyz.driver.pdsuicommon.domain.LongId
-import xyz.driver.pdsuicommon.error.DomainError
-import xyz.driver.pdsuidomain.entities.{Document, DocumentHistory}
-
-import scala.concurrent.Future
-
-object DocumentHistoryService {
-
- trait DefaultNotFoundError {
- def userMessage: String = "Document history not found"
- }
-
- trait DefaultAccessDeniedError {
- def userMessage: String = "Access denied"
- }
-
- sealed trait GetListReply
- object GetListReply {
- final case class EntityList(xs: Seq[DocumentHistory], totalFound: Int, lastUpdate: Option[LocalDateTime])
- extends GetListReply
-
- final case object AuthorizationError
- extends GetListReply with DomainError.AuthorizationError with DefaultAccessDeniedError
- }
-
-}
-
-trait DocumentHistoryService {
-
- import DocumentHistoryService._
-
- def getListByDocumentId(id: LongId[Document],
- filter: SearchFilterExpr = SearchFilterExpr.Empty,
- sorting: Option[Sorting] = None,
- pagination: Option[Pagination] = None)(
- implicit requestContext: AuthenticatedRequestContext): Future[GetListReply]
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/DocumentIssueService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/DocumentIssueService.scala
deleted file mode 100644
index 4315352..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/DocumentIssueService.scala
+++ /dev/null
@@ -1,93 +0,0 @@
-package xyz.driver.pdsuidomain.services
-
-import java.time.LocalDateTime
-
-import xyz.driver.pdsuicommon.auth.AuthenticatedRequestContext
-import xyz.driver.pdsuicommon.db.{Pagination, SearchFilterExpr, Sorting}
-import xyz.driver.pdsuicommon.domain.LongId
-import xyz.driver.pdsuicommon.error.DomainError
-import xyz.driver.pdsuidomain.entities.{Document, DocumentIssue}
-
-import scala.concurrent.Future
-
-object DocumentIssueService {
-
- trait DefaultNotFoundError {
- def userMessage: String = "DocumentIssue not found"
- }
-
- trait DefaultAccessDeniedError {
- def userMessage: String = "Access denied"
- }
-
- sealed trait CreateReply
- object CreateReply {
- type Error = CreateReply with DomainError
- final case class Created(x: DocumentIssue) extends CreateReply
- case object AuthorizationError
- extends CreateReply with DomainError.AuthorizationError with DefaultAccessDeniedError
- final case class CommonError(userMessage: String) extends CreateReply with DomainError
- }
-
- sealed trait GetByIdReply
- object GetByIdReply {
- type Error = GetByIdReply with DomainError
- final case class Entity(x: DocumentIssue) extends GetByIdReply
- case object NotFoundError extends GetByIdReply with DomainError.NotFoundError with DefaultNotFoundError
- final case class CommonError(userMessage: String) extends GetByIdReply with DomainError
- case object AuthorizationError
- extends GetByIdReply with DomainError.AuthorizationError with DefaultAccessDeniedError
- }
-
- sealed trait GetListByDocumentIdReply
- object GetListByDocumentIdReply {
- type Error = GetListByDocumentIdReply with DomainError
- final case class EntityList(xs: Seq[DocumentIssue], totalFound: Int, lastUpdate: Option[LocalDateTime])
- extends GetListByDocumentIdReply
- case object NotFoundError extends GetListByDocumentIdReply with DomainError.NotFoundError with DefaultNotFoundError
- case object AuthorizationError
- extends GetListByDocumentIdReply with DomainError.AuthorizationError with DefaultAccessDeniedError
- }
-
- sealed trait UpdateReply
- object UpdateReply {
- type Error = UpdateReply with DomainError
- final case class Updated(updated: DocumentIssue) extends UpdateReply
- case object AuthorizationError
- extends UpdateReply with DomainError.AuthorizationError with DefaultAccessDeniedError
- final case class CommonError(userMessage: String) extends UpdateReply with DomainError
- }
-
- sealed trait DeleteReply
- object DeleteReply {
- type Error = DeleteReply with DomainError
- case object Deleted extends DeleteReply
- case object AuthorizationError
- extends DeleteReply with DomainError.AuthorizationError with DefaultAccessDeniedError
- case object NotFoundError extends DeleteReply with DomainError.NotFoundError with DefaultNotFoundError
- final case class CommonError(userMessage: String) extends DeleteReply with DomainError
- }
-}
-
-trait DocumentIssueService {
-
- import DocumentIssueService._
-
- def create(draft: DocumentIssue)(implicit requestContext: AuthenticatedRequestContext): Future[CreateReply]
-
- def getById(documentId: LongId[Document], id: LongId[DocumentIssue])(
- implicit requestContext: AuthenticatedRequestContext): Future[GetByIdReply]
-
- def getListByDocumentId(documentId: LongId[Document],
- filter: SearchFilterExpr = SearchFilterExpr.Empty,
- sorting: Option[Sorting] = None,
- pagination: Option[Pagination] = None)(
- implicit requestContext: AuthenticatedRequestContext): Future[GetListByDocumentIdReply]
-
- def update(orig: DocumentIssue, draft: DocumentIssue)(
- implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply]
-
- def delete(documentId: LongId[Document], id: LongId[DocumentIssue])(
- implicit requestContext: AuthenticatedRequestContext): Future[DeleteReply]
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/DocumentService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/DocumentService.scala
deleted file mode 100644
index 9338a59..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/DocumentService.scala
+++ /dev/null
@@ -1,136 +0,0 @@
-package xyz.driver.pdsuidomain.services
-
-import java.time.LocalDateTime
-
-import xyz.driver.pdsuicommon.auth.AuthenticatedRequestContext
-import xyz.driver.pdsuicommon.db._
-import xyz.driver.pdsuicommon.domain.LongId
-import xyz.driver.pdsuicommon.error.DomainError
-import xyz.driver.pdsuicommon.logging._
-import xyz.driver.pdsuidomain.entities._
-
-import scala.concurrent.Future
-
-object DocumentService {
-
- trait DefaultNotFoundError {
- def userMessage: String = "Can not find the document"
- }
-
- trait DefaultAccessDeniedError {
- def userMessage: String = "Access denied"
- }
-
- sealed trait GetByIdReply
- object GetByIdReply {
- final case class Entity(x: Document) extends GetByIdReply
-
- type Error = GetByIdReply with DomainError
-
- case object NotFoundError extends GetByIdReply with DefaultNotFoundError with DomainError.NotFoundError
-
- case object AuthorizationError
- extends GetByIdReply with DomainError.AuthorizationError with DefaultAccessDeniedError
-
- final case class CommonError(userMessage: String)(implicit requestContext: AuthenticatedRequestContext)
- extends GetByIdReply with DomainError
-
- implicit def toPhiString(reply: GetByIdReply): PhiString = reply match {
- case x: DomainError => phi"GetByIdReply.Error($x)"
- case Entity(x) => phi"GetByIdReply.Entity($x)"
- }
- }
-
- sealed trait GetListReply
- object GetListReply {
- final case class EntityList(xs: Seq[Document], totalFound: Int, lastUpdate: Option[LocalDateTime])
- extends GetListReply
-
- type Error = GetListReply with DomainError
-
- case object AuthorizationError
- extends GetListReply with DefaultAccessDeniedError with DomainError.AuthorizationError
-
- final case class CommonError(userMessage: String) extends GetListReply with DomainError
- }
-
- sealed trait CreateReply
- object CreateReply {
- final case class Created(x: Document) extends CreateReply
-
- type Error = CreateReply with DomainError
-
- case object NotFoundError extends CreateReply with DefaultNotFoundError with DomainError.NotFoundError
-
- case object AuthorizationError
- extends CreateReply with DefaultAccessDeniedError with DomainError.AuthorizationError
-
- final case class CommonError(userMessage: String) extends CreateReply with DomainError
- }
-
- sealed trait UpdateReply
- object UpdateReply {
- final case class Updated(updated: Document) extends UpdateReply
-
- type Error = UpdateReply with DomainError
-
- case object NotFoundError extends UpdateReply with DefaultNotFoundError with DomainError.NotFoundError
-
- case object AuthorizationError
- extends UpdateReply with DefaultAccessDeniedError with DomainError.AuthorizationError
-
- final case class CommonError(userMessage: String) extends UpdateReply with DomainError
-
- implicit def toPhiString(reply: UpdateReply): PhiString = reply match {
- case Updated(x) => phi"Updated($x)"
- case x: Error => DomainError.toPhiString(x)
- }
- }
-
- sealed trait DeleteReply
- object DeleteReply {
- case object Deleted extends DeleteReply
-
- type Error = DeleteReply with DomainError
-
- case object NotFoundError extends DeleteReply with DefaultNotFoundError with DomainError.NotFoundError
-
- case object AuthorizationError
- extends DeleteReply with DefaultAccessDeniedError with DomainError.AuthorizationError
-
- final case class CommonError(userMessage: String) extends DeleteReply with DomainError
- }
-}
-
-trait DocumentService {
-
- import DocumentService._
-
- def getById(id: LongId[Document])(implicit requestContext: AuthenticatedRequestContext): Future[GetByIdReply]
-
- def getAll(filter: SearchFilterExpr = SearchFilterExpr.Empty,
- sorting: Option[Sorting] = None,
- pagination: Option[Pagination] = None)(
- implicit requestContext: AuthenticatedRequestContext): Future[GetListReply]
-
- def create(draftDocument: Document)(implicit requestContext: AuthenticatedRequestContext): Future[CreateReply]
-
- def update(orig: Document, draft: Document)(
- implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply]
-
- def delete(id: LongId[Document])(implicit requestContext: AuthenticatedRequestContext): Future[DeleteReply]
-
- def start(orig: Document)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply]
-
- def submit(orig: Document)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply]
-
- def restart(orig: Document)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply]
-
- def flag(orig: Document)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply]
-
- def resolve(orig: Document)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply]
-
- def unassign(orig: Document)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply]
-
- def archive(orig: Document)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply]
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/DocumentTypeService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/DocumentTypeService.scala
deleted file mode 100644
index 0f1bf76..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/DocumentTypeService.scala
+++ /dev/null
@@ -1,25 +0,0 @@
-package xyz.driver.pdsuidomain.services
-
-import xyz.driver.pdsuicommon.auth.AuthenticatedRequestContext
-import xyz.driver.pdsuicommon.db.Sorting
-import xyz.driver.pdsuicommon.error.DomainError
-import xyz.driver.pdsuidomain.entities.DocumentType
-import xyz.driver.pdsuidomain.services.DocumentTypeService.GetListReply
-
-import scala.concurrent.Future
-
-object DocumentTypeService {
- sealed trait GetListReply
- object GetListReply {
- final case class EntityList(xs: Seq[DocumentType], totalFound: Int) extends GetListReply
- case object AuthorizationError extends GetListReply with DomainError.AuthorizationError {
- def userMessage: String = "Access denied"
- }
- }
-}
-
-trait DocumentTypeService {
-
- def getAll(sorting: Option[Sorting] = None)(
- implicit requestContext: AuthenticatedRequestContext): Future[GetListReply]
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/ExtractedDataService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/ExtractedDataService.scala
deleted file mode 100644
index 9bcd921..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/ExtractedDataService.scala
+++ /dev/null
@@ -1,123 +0,0 @@
-package xyz.driver.pdsuidomain.services
-
-import xyz.driver.pdsuicommon.auth.AuthenticatedRequestContext
-import xyz.driver.pdsuicommon.db.{Pagination, SearchFilterExpr, Sorting}
-import xyz.driver.pdsuicommon.domain.{LongId, UuidId}
-import xyz.driver.pdsuicommon.error.DomainError
-import xyz.driver.pdsuicommon.logging._
-import xyz.driver.pdsuidomain.entities._
-import xyz.driver.pdsuidomain.entities.export.patient.ExportPatientWithLabels
-
-import scala.concurrent.Future
-
-object ExtractedDataService {
-
- trait DefaultNotFoundError {
- def userMessage: String = "Extracted data hasn't been found"
- }
-
- trait DefaultAccessDeniedError {
- def userMessage: String = "Access denied"
- }
-
- final case class RichExtractedData(extractedData: ExtractedData, labels: List[ExtractedDataLabel])
-
- object RichExtractedData {
- implicit def toPhiString(x: RichExtractedData): PhiString = {
- import x._
- phi"RichExtractedData(extractedData=$extractedData, labels=$labels)"
- }
- }
-
- sealed trait GetByIdReply
- object GetByIdReply {
- type Error = GetByIdReply with DomainError
- final case class Entity(x: RichExtractedData) extends GetByIdReply
-
- case object AuthorizationError
- extends GetByIdReply with DomainError.AuthorizationError with DefaultAccessDeniedError
-
- case object NotFoundError extends GetByIdReply with DefaultNotFoundError with DomainError.NotFoundError
-
- final case class CommonError(userMessage: String) extends GetByIdReply with DomainError
- }
-
- sealed trait GetListReply
- object GetListReply {
- final case class EntityList(xs: Seq[RichExtractedData], totalFound: Int) extends GetListReply
-
- case object AuthorizationError
- extends GetListReply with DomainError.AuthorizationError with DefaultAccessDeniedError
- }
-
- sealed trait GetPatientLabelsReply
- object GetPatientLabelsReply {
- type Error = GetPatientLabelsReply with DomainError
-
- final case class Entity(x: ExportPatientWithLabels) extends GetPatientLabelsReply
-
- case object NotFoundError extends GetPatientLabelsReply with DomainError.NotFoundError {
- def userMessage: String = "Patient not found"
- }
- }
-
- sealed trait CreateReply
- object CreateReply {
- type Error = CreateReply with DomainError
- final case class Created(x: RichExtractedData) extends CreateReply
-
- case object AuthorizationError
- extends CreateReply with DomainError.AuthorizationError with DefaultAccessDeniedError
-
- final case class CommonError(userMessage: String) extends CreateReply with DomainError
- }
-
- sealed trait UpdateReply
- object UpdateReply {
- type Error = UpdateReply with DomainError
- final case class Updated(updated: RichExtractedData) extends UpdateReply
-
- case object AuthorizationError
- extends UpdateReply with DefaultAccessDeniedError with DomainError.AuthorizationError
-
- case object NotFoundError extends UpdateReply with DefaultNotFoundError with DomainError.NotFoundError
-
- final case class CommonError(userMessage: String) extends UpdateReply with DomainError
- }
-
- sealed trait DeleteReply
- object DeleteReply {
- type Error = DeleteReply with DomainError
- case object Deleted extends DeleteReply
-
- case object AuthorizationError
- extends DeleteReply with DefaultAccessDeniedError with DomainError.AuthorizationError
-
- case object NotFoundError extends DeleteReply with DefaultNotFoundError with DomainError.NotFoundError
-
- final case class CommonError(userMessage: String) extends DeleteReply with DomainError
- }
-}
-
-trait ExtractedDataService {
-
- import ExtractedDataService._
-
- def getById(id: LongId[ExtractedData])(implicit requestContext: AuthenticatedRequestContext): Future[GetByIdReply]
-
- def getPatientLabels(id: UuidId[Patient])(
- implicit requestContext: AuthenticatedRequestContext): Future[GetPatientLabelsReply]
-
- def getAll(filter: SearchFilterExpr = SearchFilterExpr.Empty,
- sorting: Option[Sorting] = None,
- pagination: Option[Pagination] = None)(
- implicit requestContext: AuthenticatedRequestContext): Future[GetListReply]
-
- def create(draftRichExtractedData: RichExtractedData)(
- implicit requestContext: AuthenticatedRequestContext): Future[CreateReply]
-
- def update(origRichExtractedData: RichExtractedData, draftRichExtractedData: RichExtractedData)(
- implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply]
-
- def delete(id: LongId[ExtractedData])(implicit requestContext: AuthenticatedRequestContext): Future[DeleteReply]
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/HypothesisService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/HypothesisService.scala
deleted file mode 100644
index 52cd6c8..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/HypothesisService.scala
+++ /dev/null
@@ -1,27 +0,0 @@
-package xyz.driver.pdsuidomain.services
-
-import xyz.driver.pdsuicommon.auth.AuthenticatedRequestContext
-import xyz.driver.pdsuicommon.db.Sorting
-import xyz.driver.pdsuicommon.error.DomainError
-import xyz.driver.pdsuidomain.entities.Hypothesis
-
-import scala.concurrent.Future
-
-object HypothesisService {
- sealed trait GetListReply
- object GetListReply {
- final case class EntityList(xs: Seq[Hypothesis], totalFound: Int) extends GetListReply
-
- case object AuthorizationError extends GetListReply with DomainError.AuthorizationError {
- def userMessage: String = "Access denied"
- }
- }
-}
-
-trait HypothesisService {
-
- import HypothesisService._
-
- def getAll(sorting: Option[Sorting] = None)(
- implicit requestContext: AuthenticatedRequestContext): Future[GetListReply]
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/InterventionService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/InterventionService.scala
deleted file mode 100644
index 439e456..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/InterventionService.scala
+++ /dev/null
@@ -1,79 +0,0 @@
-package xyz.driver.pdsuidomain.services
-
-import xyz.driver.pdsuicommon.auth.AuthenticatedRequestContext
-import xyz.driver.pdsuicommon.db.{Pagination, SearchFilterExpr, Sorting}
-import xyz.driver.pdsuicommon.domain.LongId
-import xyz.driver.pdsuicommon.error.DomainError
-import xyz.driver.pdsuicommon.logging._
-import xyz.driver.pdsuidomain.entities._
-
-import scala.concurrent.Future
-
-object InterventionService {
-
- trait DefaultNotFoundError {
- def userMessage: String = "Intervention not found"
- }
-
- trait DefaultAccessDeniedError {
- def userMessage: String = "Access denied"
- }
-
- sealed trait GetListReply
- object GetListReply {
- final case class EntityList(xs: Seq[InterventionWithArms], totalFound: Int) extends GetListReply
-
- case object AuthorizationError
- extends GetListReply with DomainError.AuthorizationError with DefaultAccessDeniedError
- }
-
- sealed trait GetByIdReply
- object GetByIdReply {
- final case class Entity(x: InterventionWithArms) extends GetByIdReply
-
- type Error = GetByIdReply with DomainError
-
- case object NotFoundError extends GetByIdReply with DefaultNotFoundError with DomainError.NotFoundError
-
- case object AuthorizationError
- extends GetByIdReply with DomainError.AuthorizationError with DefaultAccessDeniedError
-
- final case class CommonError(userMessage: String)(implicit requestContext: AuthenticatedRequestContext)
- extends GetByIdReply with DomainError
-
- implicit def toPhiString(reply: GetByIdReply): PhiString = reply match {
- case x: DomainError => phi"GetByIdReply.Error($x)"
- case Entity(x) => phi"GetByIdReply.Entity($x)"
- }
- }
-
- sealed trait UpdateReply
- object UpdateReply {
- type Error = UpdateReply with DomainError
-
- final case class Updated(updated: InterventionWithArms) extends UpdateReply
-
- case object NotFoundError extends UpdateReply with DefaultNotFoundError with DomainError.NotFoundError
-
- case object AuthorizationError
- extends UpdateReply with DefaultAccessDeniedError with DomainError.AuthorizationError
-
- final case class CommonError(userMessage: String) extends UpdateReply with DomainError
- }
-
-}
-
-trait InterventionService {
-
- import InterventionService._
-
- def getAll(filter: SearchFilterExpr = SearchFilterExpr.Empty,
- sorting: Option[Sorting] = None,
- pagination: Option[Pagination] = None)(
- implicit requestContext: AuthenticatedRequestContext): Future[GetListReply]
-
- def getById(id: LongId[Intervention])(implicit requestContext: AuthenticatedRequestContext): Future[GetByIdReply]
-
- def update(origIntervention: InterventionWithArms, draftIntervention: InterventionWithArms)(
- implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply]
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/InterventionTypeService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/InterventionTypeService.scala
deleted file mode 100644
index 298a92d..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/InterventionTypeService.scala
+++ /dev/null
@@ -1,27 +0,0 @@
-package xyz.driver.pdsuidomain.services
-
-import xyz.driver.pdsuicommon.auth.AuthenticatedRequestContext
-import xyz.driver.pdsuicommon.db.Sorting
-import xyz.driver.pdsuicommon.error.DomainError
-import xyz.driver.pdsuidomain.entities.InterventionType
-
-import scala.concurrent.Future
-
-object InterventionTypeService {
- sealed trait GetListReply
- object GetListReply {
- final case class EntityList(xs: Seq[InterventionType], totalFound: Int) extends GetListReply
-
- case object AuthorizationError extends GetListReply with DomainError.AuthorizationError {
- def userMessage: String = "Access denied"
- }
- }
-}
-
-trait InterventionTypeService {
-
- import InterventionTypeService._
-
- def getAll(sorting: Option[Sorting] = None)(
- implicit requestContext: AuthenticatedRequestContext): Future[GetListReply]
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/MedicalRecordHistoryService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/MedicalRecordHistoryService.scala
deleted file mode 100644
index f8fe3be..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/MedicalRecordHistoryService.scala
+++ /dev/null
@@ -1,44 +0,0 @@
-package xyz.driver.pdsuidomain.services
-
-import java.time.LocalDateTime
-
-import xyz.driver.pdsuicommon.auth.AuthenticatedRequestContext
-import xyz.driver.pdsuicommon.db.{Pagination, SearchFilterExpr, Sorting}
-import xyz.driver.pdsuicommon.domain.LongId
-import xyz.driver.pdsuicommon.error.DomainError
-import xyz.driver.pdsuidomain.entities.{MedicalRecord, MedicalRecordHistory}
-
-import scala.concurrent.Future
-
-object MedicalRecordHistoryService {
-
- trait DefaultNotFoundError {
- def userMessage: String = "Medical record history not found"
- }
-
- trait DefaultAccessDeniedError {
- def userMessage: String = "Access denied"
- }
-
- sealed trait GetListReply
- object GetListReply {
- final case class EntityList(xs: Seq[MedicalRecordHistory], totalFound: Int, lastUpdate: Option[LocalDateTime])
- extends GetListReply
-
- final case object AuthorizationError
- extends GetListReply with DomainError.AuthorizationError with DefaultAccessDeniedError
- }
-
-}
-
-trait MedicalRecordHistoryService {
-
- import MedicalRecordHistoryService._
-
- def getListByRecordId(id: LongId[MedicalRecord],
- filter: SearchFilterExpr = SearchFilterExpr.Empty,
- sorting: Option[Sorting] = None,
- pagination: Option[Pagination] = None)(
- implicit requestContext: AuthenticatedRequestContext): Future[GetListReply]
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/MedicalRecordIssueService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/MedicalRecordIssueService.scala
deleted file mode 100644
index 723bdfa..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/MedicalRecordIssueService.scala
+++ /dev/null
@@ -1,93 +0,0 @@
-package xyz.driver.pdsuidomain.services
-
-import java.time.LocalDateTime
-
-import xyz.driver.pdsuicommon.auth.AuthenticatedRequestContext
-import xyz.driver.pdsuicommon.db.{Pagination, SearchFilterExpr, Sorting}
-import xyz.driver.pdsuicommon.domain.LongId
-import xyz.driver.pdsuicommon.error.DomainError
-import xyz.driver.pdsuidomain.entities.{MedicalRecord, MedicalRecordIssue}
-
-import scala.concurrent.Future
-
-object MedicalRecordIssueService {
-
- trait DefaultNotFoundError {
- def userMessage: String = "MedicalRecordIssue not found"
- }
-
- trait DefaultAccessDeniedError {
- def userMessage: String = "Access denied"
- }
-
- sealed trait CreateReply
- object CreateReply {
- type Error = CreateReply with DomainError
- final case class Created(x: MedicalRecordIssue) extends CreateReply
- case object AuthorizationError
- extends CreateReply with DomainError.AuthorizationError with DefaultAccessDeniedError
- final case class CommonError(userMessage: String) extends CreateReply with DomainError
- }
-
- sealed trait GetByIdReply
- object GetByIdReply {
- type Error = GetByIdReply with DomainError
- final case class Entity(x: MedicalRecordIssue) extends GetByIdReply
- case object NotFoundError extends GetByIdReply with DomainError.NotFoundError with DefaultNotFoundError
- final case class CommonError(userMessage: String) extends GetByIdReply with DomainError
- case object AuthorizationError
- extends GetByIdReply with DomainError.AuthorizationError with DefaultAccessDeniedError
- }
-
- sealed trait GetListByRecordIdReply
- object GetListByRecordIdReply {
- type Error = GetListByRecordIdReply with DomainError
- final case class EntityList(xs: Seq[MedicalRecordIssue], totalFound: Int, lastUpdate: Option[LocalDateTime])
- extends GetListByRecordIdReply
- case object NotFoundError extends GetListByRecordIdReply with DomainError.NotFoundError with DefaultNotFoundError
- case object AuthorizationError
- extends GetListByRecordIdReply with DomainError.AuthorizationError with DefaultAccessDeniedError
- }
-
- sealed trait UpdateReply
- object UpdateReply {
- type Error = UpdateReply with DomainError
- final case class Updated(updated: MedicalRecordIssue) extends UpdateReply
- case object AuthorizationError
- extends UpdateReply with DomainError.AuthorizationError with DefaultAccessDeniedError
- final case class CommonError(userMessage: String) extends UpdateReply with DomainError
- }
-
- sealed trait DeleteReply
- object DeleteReply {
- type Error = DeleteReply with DomainError
- case object Deleted extends DeleteReply
- case object AuthorizationError
- extends DeleteReply with DomainError.AuthorizationError with DefaultAccessDeniedError
- case object NotFoundError extends DeleteReply with DomainError.NotFoundError with DefaultNotFoundError
- final case class CommonError(userMessage: String) extends DeleteReply with DomainError
- }
-}
-
-trait MedicalRecordIssueService {
-
- import MedicalRecordIssueService._
-
- def create(draft: MedicalRecordIssue)(implicit requestContext: AuthenticatedRequestContext): Future[CreateReply]
-
- def getById(recordId: LongId[MedicalRecord], id: LongId[MedicalRecordIssue])(
- implicit requestContext: AuthenticatedRequestContext): Future[GetByIdReply]
-
- def getListByRecordId(recordId: LongId[MedicalRecord],
- filter: SearchFilterExpr = SearchFilterExpr.Empty,
- sorting: Option[Sorting] = None,
- pagination: Option[Pagination] = None)(
- implicit requestContext: AuthenticatedRequestContext): Future[GetListByRecordIdReply]
-
- def update(orig: MedicalRecordIssue, draft: MedicalRecordIssue)(
- implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply]
-
- def delete(recordId: LongId[MedicalRecord], id: LongId[MedicalRecordIssue])(
- implicit requestContext: AuthenticatedRequestContext): Future[DeleteReply]
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/MedicalRecordService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/MedicalRecordService.scala
deleted file mode 100644
index 7a0502b..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/MedicalRecordService.scala
+++ /dev/null
@@ -1,112 +0,0 @@
-package xyz.driver.pdsuidomain.services
-
-import akka.NotUsed
-import akka.stream.scaladsl.Source
-import akka.util.ByteString
-import java.time.LocalDateTime
-import xyz.driver.pdsuicommon.auth.{AnonymousRequestContext, AuthenticatedRequestContext}
-import xyz.driver.pdsuicommon.db._
-import xyz.driver.pdsuicommon.domain.LongId
-import xyz.driver.pdsuicommon.error._
-import xyz.driver.pdsuidomain.entities.MedicalRecord.PdfSource
-import xyz.driver.pdsuidomain.entities._
-
-import scala.concurrent.Future
-
-object MedicalRecordService {
-
- type PdfSourceFetcher = (String, String) => Future[PdfSource]
-
- trait DefaultNotFoundError {
- def userMessage: String = "Medical record hasn't been found"
- }
-
- trait DefaultAccessDeniedError {
- def userMessage: String = "Access denied"
- }
-
- sealed trait GetByIdReply
- object GetByIdReply {
- final case class Entity(x: MedicalRecord) extends GetByIdReply
-
- type Error = GetByIdReply with DomainError
-
- case object NotFoundError extends GetByIdReply with DomainError.NotFoundError with DefaultNotFoundError
-
- final case class CommonError(userMessage: String) extends GetByIdReply with DomainError
-
- case object AuthorizationError
- extends GetByIdReply with DomainError.AuthorizationError with DefaultAccessDeniedError
- }
-
- sealed trait GetListReply
- object GetListReply {
- final case class EntityList(xs: Seq[MedicalRecord], totalFound: Int, lastUpdate: Option[LocalDateTime])
- extends GetListReply
-
- type Error = GetListReply with DomainError
-
- case object AuthorizationError
- extends GetListReply with DomainError.AuthorizationError with DefaultAccessDeniedError
-
- case object NotFoundError extends GetListReply with DomainError.NotFoundError {
- def userMessage: String = "Patient wasn't found"
- }
- }
-
- sealed trait CreateReply
- object CreateReply {
- final case class Created(x: MedicalRecord) extends CreateReply
- }
-
- sealed trait UpdateReply
- object UpdateReply {
- type Error = UpdateReply with DomainError
-
- final case class Updated(updated: MedicalRecord) extends UpdateReply
-
- case object NotFoundError extends UpdateReply with DefaultNotFoundError with DomainError.NotFoundError
-
- case object AuthorizationError
- extends UpdateReply with DefaultAccessDeniedError with DomainError.AuthorizationError
-
- final case class CommonError(userMessage: String) extends UpdateReply with DomainError
- }
-
- final case class Settings(pdfSourceBucket: String)
-}
-
-trait MedicalRecordService {
-
- import MedicalRecordService._
-
- def getById(recordId: LongId[MedicalRecord])(
- implicit requestContext: AuthenticatedRequestContext): Future[GetByIdReply]
-
- def getPdfSource(recordId: LongId[MedicalRecord])(
- implicit requestContext: AuthenticatedRequestContext): Future[Source[ByteString, NotUsed]]
-
- def getAll(filter: SearchFilterExpr = SearchFilterExpr.Empty,
- sorting: Option[Sorting] = None,
- pagination: Option[Pagination] = None)(
- implicit requestContext: AuthenticatedRequestContext): Future[GetListReply]
-
- def create(draft: MedicalRecord)(implicit requestContext: AnonymousRequestContext): Future[CreateReply]
-
- def update(origRecord: MedicalRecord, draftRecord: MedicalRecord)(
- implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply]
-
- def start(orig: MedicalRecord)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply]
-
- def submit(orig: MedicalRecord)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply]
-
- def restart(orig: MedicalRecord)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply]
-
- def flag(orig: MedicalRecord)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply]
-
- def resolve(orig: MedicalRecord)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply]
-
- def unassign(orig: MedicalRecord)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply]
-
- def archive(orig: MedicalRecord)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply]
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/MessageService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/MessageService.scala
deleted file mode 100644
index 6718f26..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/MessageService.scala
+++ /dev/null
@@ -1,88 +0,0 @@
-package xyz.driver.pdsuidomain.services
-
-import java.time.LocalDateTime
-
-import xyz.driver.pdsuicommon.auth.AuthenticatedRequestContext
-import xyz.driver.pdsuicommon.db.{Pagination, SearchFilterExpr, Sorting}
-import xyz.driver.pdsuicommon.domain.LongId
-import xyz.driver.pdsuicommon.error.DomainError
-import xyz.driver.pdsuidomain.entities.Message
-
-import scala.concurrent.Future
-
-object MessageService {
-
- trait DefaultNotFoundError {
- def userMessage: String = "Message not found"
- }
-
- trait DefaultAccessDeniedError {
- def userMessage: String = "Access denied"
- }
-
- sealed trait CreateReply
- object CreateReply {
- type Error = CreateReply with DomainError
- final case class Created(x: Message) extends CreateReply
- case object AuthorizationError
- extends CreateReply with DomainError.AuthorizationError with DefaultAccessDeniedError
- final case class CommonError(userMessage: String) extends CreateReply with DomainError
- }
-
- sealed trait GetByIdReply
- object GetByIdReply {
- type Error = GetByIdReply with DomainError
- final case class Entity(x: Message) extends GetByIdReply
- case object NotFoundError extends GetByIdReply with DomainError.NotFoundError with DefaultNotFoundError
- final case class CommonError(userMessage: String) extends GetByIdReply with DomainError
- case object AuthorizationError
- extends GetByIdReply with DomainError.AuthorizationError with DefaultAccessDeniedError
- }
-
- sealed trait GetListReply
- object GetListReply {
- type Error = GetListReply with DomainError
- final case class EntityList(xs: Seq[Message], totalFound: Int, lastUpdate: Option[LocalDateTime])
- extends GetListReply
- case object AuthorizationError
- extends GetListReply with DomainError.AuthorizationError with DefaultAccessDeniedError
- }
-
- sealed trait UpdateReply
- object UpdateReply {
- type Error = UpdateReply with DomainError
- final case class Updated(updated: Message) extends UpdateReply
- case object AuthorizationError
- extends UpdateReply with DomainError.AuthorizationError with DefaultAccessDeniedError
- final case class CommonError(userMessage: String) extends UpdateReply with DomainError
- }
-
- sealed trait DeleteReply
- object DeleteReply {
- type Error = DeleteReply with DomainError
- case object Deleted extends DeleteReply
- case object AuthorizationError
- extends DeleteReply with DomainError.AuthorizationError with DefaultAccessDeniedError
- case object NotFoundError extends DeleteReply with DomainError.NotFoundError with DefaultNotFoundError
- final case class CommonError(userMessage: String) extends DeleteReply with DomainError
- }
-}
-
-trait MessageService {
-
- import MessageService._
-
- def create(draftMessage: Message)(implicit requestContext: AuthenticatedRequestContext): Future[CreateReply]
-
- def getById(messageId: LongId[Message])(implicit requestContext: AuthenticatedRequestContext): Future[GetByIdReply]
-
- def getAll(filter: SearchFilterExpr = SearchFilterExpr.Empty,
- sorting: Option[Sorting] = None,
- pagination: Option[Pagination] = None)(
- implicit requestContext: AuthenticatedRequestContext): Future[GetListReply]
-
- def update(origMessage: Message, draftMessage: Message)(
- implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply]
-
- def delete(messageId: LongId[Message])(implicit requestContext: AuthenticatedRequestContext): Future[DeleteReply]
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/PatientCriterionService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/PatientCriterionService.scala
deleted file mode 100644
index 9ff3879..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/PatientCriterionService.scala
+++ /dev/null
@@ -1,118 +0,0 @@
-package xyz.driver.pdsuidomain.services
-
-import java.time.LocalDateTime
-
-import xyz.driver.pdsuicommon.auth.AuthenticatedRequestContext
-import xyz.driver.pdsuicommon.db._
-import xyz.driver.pdsuicommon.domain._
-import xyz.driver.pdsuicommon.error.DomainError
-import xyz.driver.pdsuicommon.logging._
-import xyz.driver.pdsuidomain.entities._
-
-import scala.concurrent.Future
-
-object PatientCriterionService {
-
- final case class DraftPatientCriterion(id: LongId[PatientCriterion],
- eligibilityStatus: Option[FuzzyValue],
- isVerified: Option[Boolean]) {
- def applyTo(orig: PatientCriterion) = {
- orig.copy(
- eligibilityStatus = eligibilityStatus.orElse(orig.eligibilityStatus),
- isVerified = isVerified.getOrElse(orig.isVerified)
- )
- }
- }
-
- trait DefaultPatientNotFoundError {
- def userMessage: String = "Patient not found"
- }
-
- trait DefaultNotFoundError {
- def userMessage: String = "Patient criterion not found"
- }
-
- trait DefaultAccessDeniedError {
- def userMessage: String = "Access denied"
- }
-
- sealed trait GetListReply
- object GetListReply {
- type Error = GetListReply with DomainError
-
- final case class EntityList(xs: Seq[(PatientCriterion, LongId[Label], List[PatientCriterionArm])],
- totalFound: Int,
- lastUpdate: Option[LocalDateTime])
- extends GetListReply
-
- case object AuthorizationError
- extends GetListReply with DomainError.AuthorizationError with DefaultAccessDeniedError
-
- case object PatientNotFoundError
- extends GetListReply with DomainError.NotFoundError with DefaultPatientNotFoundError
-
- final case class CommonError(userMessage: String) extends GetListReply with DomainError
-
- }
-
- sealed trait GetByIdReply
- object GetByIdReply {
- type Error = GetByIdReply with DomainError
-
- final case class Entity(x: PatientCriterion, labelId: LongId[Label], armList: List[PatientCriterionArm])
- extends GetByIdReply
-
- case object AuthorizationError
- extends GetByIdReply with DomainError.AuthorizationError with DefaultAccessDeniedError
-
- case object NotFoundError extends GetByIdReply with DomainError.NotFoundError with DefaultNotFoundError
-
- case object PatientNotFoundError
- extends GetByIdReply with DomainError.NotFoundError with DefaultPatientNotFoundError
-
- final case class CommonError(userMessage: String) extends GetByIdReply with DomainError
-
- implicit def toPhiString(reply: GetByIdReply): PhiString = reply match {
- case x: DomainError => phi"GetByIdReply.Error($x)"
- case Entity(x, labelId, armList) => phi"GetByIdReply.Entity(entity=$x, labelId=$labelId, armList=$armList)"
- }
- }
-
- sealed trait UpdateReply
- object UpdateReply {
- type Error = UpdateReply with DomainError
-
- final case class Updated(x: PatientCriterion, labelId: LongId[Label], armList: List[PatientCriterionArm])
- extends UpdateReply
-
- case object UpdatedList extends UpdateReply
-
- case object AuthorizationError
- extends UpdateReply with DomainError.AuthorizationError with DefaultAccessDeniedError
-
- case object PatientNotFoundError
- extends UpdateReply with DomainError.NotFoundError with DefaultPatientNotFoundError
-
- final case class CommonError(userMessage: String) extends UpdateReply with DomainError
- }
-}
-
-trait PatientCriterionService {
-
- import PatientCriterionService._
-
- def getAll(patientId: UuidId[Patient],
- origFilter: SearchFilterExpr = SearchFilterExpr.Empty,
- sorting: Option[Sorting] = None,
- pagination: Option[Pagination] = None)(
- implicit requestContext: AuthenticatedRequestContext): Future[GetListReply]
-
- def getById(patientId: UuidId[Patient], id: LongId[PatientCriterion])(
- implicit requestContext: AuthenticatedRequestContext): Future[GetByIdReply]
-
- def updateList(patientId: UuidId[Patient], draftEntities: List[DraftPatientCriterion])(
- implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply]
-
- def update(origEntity: PatientCriterion, draftEntity: PatientCriterion, patientId: UuidId[Patient])(
- implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply]
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/PatientEligibleTrialService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/PatientEligibleTrialService.scala
deleted file mode 100644
index 2c17f74..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/PatientEligibleTrialService.scala
+++ /dev/null
@@ -1,132 +0,0 @@
-package xyz.driver.pdsuidomain.services
-
-import xyz.driver.pdsuicommon.auth.AuthenticatedRequestContext
-import xyz.driver.pdsuicommon.db.{Pagination, SearchFilterExpr, Sorting}
-import xyz.driver.pdsuicommon.domain.{LongId, UuidId}
-import xyz.driver.pdsuicommon.error.DomainError
-import xyz.driver.pdsuicommon.logging._
-import xyz.driver.pdsuidomain.entities.{Trial, _}
-
-import scala.concurrent.Future
-
-object PatientEligibleTrialService {
-
- trait DefaultNotFoundError {
- def userMessage: String = "Patient eligible trial not found"
- }
-
- trait DefaultPatientNotFoundError {
- def userMessage: String = "Patient not found"
- }
-
- trait DefaultAccessDeniedError {
- def userMessage: String = "Access denied"
- }
-
- final case class RichPatientEligibleTrial(trial: Trial,
- group: PatientTrialArmGroupView,
- arms: List[PatientCriterionArm])
-
- object RichPatientEligibleTrial {
- implicit def toPhiString(x: RichPatientEligibleTrial): PhiString = {
- phi"RichPatientEligibleTrial(group=${x.group}, trial=${x.trial}, arms=${x.arms})"
- }
- }
-
- sealed trait GetListReply
- object GetListReply {
- final case class EntityList(xs: Seq[RichPatientEligibleTrial], totalFound: Int) extends GetListReply
-
- case object AuthorizationError
- extends GetListReply with DomainError.AuthorizationError with DefaultAccessDeniedError
-
- case object PatientNotFoundError
- extends GetListReply with DefaultPatientNotFoundError with DomainError.NotFoundError
-
- final case class CommonError(userMessage: String) extends GetListReply with DomainError
- }
-
- sealed trait GetByIdReply
- object GetByIdReply {
- final case class Entity(x: RichPatientEligibleTrial) extends GetByIdReply
-
- type Error = GetByIdReply with DomainError
-
- case object NotFoundError extends GetByIdReply with DefaultNotFoundError with DomainError.NotFoundError
-
- case object PatientNotFoundError
- extends GetByIdReply with DefaultPatientNotFoundError with DomainError.NotFoundError
-
- case object AuthorizationError
- extends GetByIdReply with DomainError.AuthorizationError with DefaultAccessDeniedError
-
- final case class CommonError(userMessage: String) extends GetByIdReply with DomainError
-
- implicit def toPhiString(reply: GetByIdReply): PhiString = reply match {
- case x: DomainError => phi"GetByIdReply.Error($x)"
- case Entity(x) => phi"GetByIdReply.Entity($x)"
- }
- }
-
- sealed trait GetCriterionListOfGroupReply
- object GetCriterionListOfGroupReply {
- final case class EntityList(xs: Seq[(PatientCriterion, LongId[Label], List[PatientCriterionArm])], totalFound: Int)
- extends GetCriterionListOfGroupReply
-
- type Error = GetCriterionListOfGroupReply with DomainError
-
- case object AuthorizationError
- extends GetCriterionListOfGroupReply with DomainError.AuthorizationError with DefaultAccessDeniedError
-
- case object NotFoundError
- extends GetCriterionListOfGroupReply with DefaultNotFoundError with DomainError.NotFoundError
-
- case object PatientNotFoundError
- extends GetCriterionListOfGroupReply with DefaultPatientNotFoundError with DomainError.NotFoundError
-
- final case class CommonError(userMessage: String) extends GetCriterionListOfGroupReply with DomainError
- }
-
- sealed trait UpdateReply
- object UpdateReply {
- type Error = UpdateReply with DomainError
-
- final case class Updated(updated: RichPatientEligibleTrial) extends UpdateReply
-
- case object NotFoundError extends UpdateReply with DefaultNotFoundError with DomainError.NotFoundError
-
- case object PatientNotFoundError
- extends UpdateReply with DefaultPatientNotFoundError with DomainError.NotFoundError
-
- case object AuthorizationError
- extends UpdateReply with DomainError.AuthorizationError with DefaultAccessDeniedError
-
- final case class CommonError(userMessage: String) extends UpdateReply with DomainError
-
- implicit def toPhiString(reply: UpdateReply): PhiString = reply match {
- case Updated(x) => phi"Updated($x)"
- case x: Error => DomainError.toPhiString(x)
- }
- }
-}
-
-trait PatientEligibleTrialService {
-
- import PatientEligibleTrialService._
-
- def getAll(patientId: UuidId[Patient],
- filter: SearchFilterExpr = SearchFilterExpr.Empty,
- sorting: Option[Sorting] = None,
- pagination: Option[Pagination] = None)(
- implicit requestContext: AuthenticatedRequestContext): Future[GetListReply]
-
- def getById(patientId: UuidId[Patient], id: LongId[PatientTrialArmGroup])(
- implicit requestContext: AuthenticatedRequestContext): Future[GetByIdReply]
-
- def getCriterionListByGroupId(patientId: UuidId[Patient], id: LongId[PatientTrialArmGroup])(
- implicit requestContext: AuthenticatedRequestContext): Future[GetCriterionListOfGroupReply]
-
- def update(origEligibleTrialWithTrial: RichPatientEligibleTrial,
- draftPatientTrialArmGroup: PatientTrialArmGroupView)(
- implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply]
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/PatientHistoryService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/PatientHistoryService.scala
deleted file mode 100644
index 855eddc..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/PatientHistoryService.scala
+++ /dev/null
@@ -1,44 +0,0 @@
-package xyz.driver.pdsuidomain.services
-
-import java.time.LocalDateTime
-
-import xyz.driver.pdsuicommon.auth.AuthenticatedRequestContext
-import xyz.driver.pdsuicommon.db.{Pagination, SearchFilterExpr, Sorting}
-import xyz.driver.pdsuicommon.domain.UuidId
-import xyz.driver.pdsuicommon.error.DomainError
-import xyz.driver.pdsuidomain.entities.{Patient, PatientHistory}
-
-import scala.concurrent.Future
-
-object PatientHistoryService {
-
- trait DefaultNotFoundError {
- def userMessage: String = "Patient history not found"
- }
-
- trait DefaultAccessDeniedError {
- def userMessage: String = "Access denied"
- }
-
- sealed trait GetListReply
- object GetListReply {
- final case class EntityList(xs: Seq[PatientHistory], totalFound: Int, lastUpdate: Option[LocalDateTime])
- extends GetListReply
-
- final case object AuthorizationError
- extends GetListReply with DomainError.AuthorizationError with DefaultAccessDeniedError
- }
-
-}
-
-trait PatientHistoryService {
-
- import PatientHistoryService._
-
- def getListByPatientId(id: UuidId[Patient],
- filter: SearchFilterExpr = SearchFilterExpr.Empty,
- sorting: Option[Sorting] = None,
- pagination: Option[Pagination] = None)(
- implicit requestContext: AuthenticatedRequestContext): Future[GetListReply]
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/PatientHypothesisService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/PatientHypothesisService.scala
deleted file mode 100644
index f782cab..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/PatientHypothesisService.scala
+++ /dev/null
@@ -1,99 +0,0 @@
-package xyz.driver.pdsuidomain.services
-
-import xyz.driver.pdsuicommon.auth.AuthenticatedRequestContext
-import xyz.driver.pdsuicommon.db.{Pagination, SearchFilterExpr, Sorting}
-import xyz.driver.pdsuicommon.domain.UuidId
-import xyz.driver.pdsuicommon.error.DomainError
-import xyz.driver.pdsuicommon.logging._
-import xyz.driver.pdsuidomain.entities.{Hypothesis, Patient, PatientHypothesis}
-
-import scala.concurrent.Future
-
-object PatientHypothesisService {
-
- trait DefaultNotFoundError {
- def userMessage: String = "Patient hypothesis not found"
- }
-
- trait DefaultPatientNotFoundError {
- def userMessage: String = "Patient not found"
- }
-
- trait DefaultAccessDeniedError {
- def userMessage: String = "Access denied"
- }
-
- sealed trait GetListReply
- object GetListReply {
- final case class EntityList(xs: Seq[(PatientHypothesis, Boolean)], totalFound: Int) extends GetListReply
-
- case object AuthorizationError
- extends GetListReply with DomainError.AuthorizationError with DefaultAccessDeniedError
-
- case object PatientNotFoundError
- extends GetListReply with DefaultPatientNotFoundError with DomainError.NotFoundError
-
- final case class CommonError(userMessage: String) extends GetListReply with DomainError
- }
-
- sealed trait GetByIdReply
- object GetByIdReply {
- final case class Entity(x: PatientHypothesis, isRequired: Boolean) extends GetByIdReply
-
- type Error = GetByIdReply with DomainError
-
- case object NotFoundError extends GetByIdReply with DefaultNotFoundError with DomainError.NotFoundError
-
- case object PatientNotFoundError
- extends GetByIdReply with DefaultPatientNotFoundError with DomainError.NotFoundError
-
- case object AuthorizationError
- extends GetByIdReply with DomainError.AuthorizationError with DefaultAccessDeniedError
-
- final case class CommonError(userMessage: String) extends GetByIdReply with DomainError
-
- implicit def toPhiString(reply: GetByIdReply): PhiString = reply match {
- case x: DomainError => phi"GetByIdReply.Error($x)"
- case Entity(x, isRequired) => phi"GetByIdReply.Entity($x, $isRequired)"
- }
- }
-
- sealed trait UpdateReply
- object UpdateReply {
- type Error = UpdateReply with DomainError
-
- final case class Updated(updated: PatientHypothesis) extends UpdateReply
-
- case object NotFoundError extends UpdateReply with DefaultNotFoundError with DomainError.NotFoundError
-
- case object PatientNotFoundError
- extends UpdateReply with DefaultPatientNotFoundError with DomainError.NotFoundError
-
- case object AuthorizationError
- extends UpdateReply with DomainError.AuthorizationError with DefaultAccessDeniedError
-
- final case class CommonError(userMessage: String) extends UpdateReply with DomainError
-
- implicit def toPhiString(reply: UpdateReply): PhiString = reply match {
- case Updated(x) => phi"Updated($x)"
- case x: Error => DomainError.toPhiString(x)
- }
- }
-}
-
-trait PatientHypothesisService {
-
- import PatientHypothesisService._
-
- def getAll(patientId: UuidId[Patient],
- filter: SearchFilterExpr = SearchFilterExpr.Empty,
- sorting: Option[Sorting] = None,
- pagination: Option[Pagination] = None)(
- implicit requestContext: AuthenticatedRequestContext): Future[GetListReply]
-
- def getById(patientId: UuidId[Patient], hypothesisId: UuidId[Hypothesis])(
- implicit requestContext: AuthenticatedRequestContext): Future[GetByIdReply]
-
- def update(origPatientHypothesis: PatientHypothesis, draftPatientHypothesis: PatientHypothesis)(
- implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply]
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/PatientIssueService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/PatientIssueService.scala
deleted file mode 100644
index b53301d..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/PatientIssueService.scala
+++ /dev/null
@@ -1,93 +0,0 @@
-package xyz.driver.pdsuidomain.services
-
-import java.time.LocalDateTime
-
-import xyz.driver.pdsuicommon.auth.AuthenticatedRequestContext
-import xyz.driver.pdsuicommon.db.{Pagination, SearchFilterExpr, Sorting}
-import xyz.driver.pdsuicommon.domain.{LongId, UuidId}
-import xyz.driver.pdsuicommon.error.DomainError
-import xyz.driver.pdsuidomain.entities.{Patient, PatientIssue}
-
-import scala.concurrent.Future
-
-object PatientIssueService {
-
- trait DefaultNotFoundError {
- def userMessage: String = "PatientIssue not found"
- }
-
- trait DefaultAccessDeniedError {
- def userMessage: String = "Access denied"
- }
-
- sealed trait CreateReply
- object CreateReply {
- type Error = CreateReply with DomainError
- final case class Created(x: PatientIssue) extends CreateReply
- case object AuthorizationError
- extends CreateReply with DomainError.AuthorizationError with DefaultAccessDeniedError
- final case class CommonError(userMessage: String) extends CreateReply with DomainError
- }
-
- sealed trait GetByIdReply
- object GetByIdReply {
- type Error = GetByIdReply with DomainError
- final case class Entity(x: PatientIssue) extends GetByIdReply
- case object NotFoundError extends GetByIdReply with DomainError.NotFoundError with DefaultNotFoundError
- final case class CommonError(userMessage: String) extends GetByIdReply with DomainError
- case object AuthorizationError
- extends GetByIdReply with DomainError.AuthorizationError with DefaultAccessDeniedError
- }
-
- sealed trait GetListByPatientIdReply
- object GetListByPatientIdReply {
- type Error = GetListByPatientIdReply with DomainError
- final case class EntityList(xs: Seq[PatientIssue], totalFound: Int, lastUpdate: Option[LocalDateTime])
- extends GetListByPatientIdReply
- case object NotFoundError extends GetListByPatientIdReply with DomainError.NotFoundError with DefaultNotFoundError
- case object AuthorizationError
- extends GetListByPatientIdReply with DomainError.AuthorizationError with DefaultAccessDeniedError
- }
-
- sealed trait UpdateReply
- object UpdateReply {
- type Error = UpdateReply with DomainError
- final case class Updated(updated: PatientIssue) extends UpdateReply
- case object AuthorizationError
- extends UpdateReply with DomainError.AuthorizationError with DefaultAccessDeniedError
- final case class CommonError(userMessage: String) extends UpdateReply with DomainError
- }
-
- sealed trait DeleteReply
- object DeleteReply {
- type Error = DeleteReply with DomainError
- case object Deleted extends DeleteReply
- case object AuthorizationError
- extends DeleteReply with DomainError.AuthorizationError with DefaultAccessDeniedError
- case object NotFoundError extends DeleteReply with DomainError.NotFoundError with DefaultNotFoundError
- final case class CommonError(userMessage: String) extends DeleteReply with DomainError
- }
-}
-
-trait PatientIssueService {
-
- import PatientIssueService._
-
- def create(draft: PatientIssue)(implicit requestContext: AuthenticatedRequestContext): Future[CreateReply]
-
- def getById(patientId: UuidId[Patient], id: LongId[PatientIssue])(
- implicit requestContext: AuthenticatedRequestContext): Future[GetByIdReply]
-
- def getListByPatientId(patientId: UuidId[Patient],
- filter: SearchFilterExpr = SearchFilterExpr.Empty,
- sorting: Option[Sorting] = None,
- pagination: Option[Pagination] = None)(
- implicit requestContext: AuthenticatedRequestContext): Future[GetListByPatientIdReply]
-
- def update(orig: PatientIssue, draft: PatientIssue)(
- implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply]
-
- def delete(patientId: UuidId[Patient], id: LongId[PatientIssue])(
- implicit requestContext: AuthenticatedRequestContext): Future[DeleteReply]
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/PatientLabelEvidenceService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/PatientLabelEvidenceService.scala
deleted file mode 100644
index 56e2e3d..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/PatientLabelEvidenceService.scala
+++ /dev/null
@@ -1,64 +0,0 @@
-package xyz.driver.pdsuidomain.services
-
-import xyz.driver.pdsuicommon.auth.AuthenticatedRequestContext
-import xyz.driver.pdsuicommon.db._
-import xyz.driver.pdsuicommon.domain.{LongId, UuidId}
-import xyz.driver.pdsuicommon.error.DomainError
-import xyz.driver.pdsuidomain.entities._
-
-import scala.concurrent.Future
-
-object PatientLabelEvidenceService {
-
- trait DefaultAccessDeniedError {
- def userMessage: String = "Access denied"
- }
-
- trait DefaultPatientNotFoundError {
- def userMessage: String = "Patient not found"
- }
-
- sealed trait GetByIdReply
- object GetByIdReply {
- final case class Entity(x: PatientLabelEvidenceView) extends GetByIdReply
-
- type Error = GetByIdReply with DomainError
-
- final case class NotFoundError(userMessage: String) extends GetByIdReply with DomainError.NotFoundError
-
- final case class CommonError(userMessage: String) extends GetByIdReply with DomainError
-
- case object AuthorizationError
- extends GetByIdReply with DomainError.AuthorizationError with DefaultAccessDeniedError
- }
-
- sealed trait GetListReply
- object GetListReply {
- final case class EntityList(xs: Seq[PatientLabelEvidenceView], totalFound: Int) extends GetListReply
-
- type Error = GetListReply with DomainError
-
- case object PatientNotFoundError
- extends GetListReply with DefaultPatientNotFoundError with DomainError.NotFoundError
-
- case object AuthorizationError
- extends GetListReply with DomainError.AuthorizationError with DefaultAccessDeniedError
-
- final case class CommonError(userMessage: String) extends GetListReply with DomainError
- }
-}
-
-trait PatientLabelEvidenceService {
-
- import PatientLabelEvidenceService._
-
- def getById(patientId: UuidId[Patient], labelId: LongId[Label], id: LongId[PatientLabelEvidence])(
- implicit requestContext: AuthenticatedRequestContext): Future[GetByIdReply]
-
- def getAll(patientId: UuidId[Patient],
- labelId: LongId[Label],
- filter: SearchFilterExpr = SearchFilterExpr.Empty,
- sorting: Option[Sorting] = None,
- pagination: Option[Pagination] = None)(
- implicit requestContext: AuthenticatedRequestContext): Future[GetListReply]
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/PatientLabelService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/PatientLabelService.scala
deleted file mode 100644
index 71b8bd4..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/PatientLabelService.scala
+++ /dev/null
@@ -1,117 +0,0 @@
-package xyz.driver.pdsuidomain.services
-
-import xyz.driver.pdsuicommon.auth.AuthenticatedRequestContext
-import xyz.driver.pdsuicommon.db._
-import xyz.driver.pdsuicommon.domain._
-import xyz.driver.pdsuicommon.error.DomainError
-import xyz.driver.pdsuicommon.logging._
-import xyz.driver.pdsuidomain.entities._
-
-import scala.concurrent.Future
-
-object PatientLabelService {
-
- trait DefaultNotFoundError {
- def userMessage: String = "Patient label not found"
- }
-
- trait DefaultPatientNotFoundError {
- def userMessage: String = "Patient not found"
- }
-
- trait DefaultAccessDeniedError {
- def userMessage: String = "Access denied"
- }
-
- sealed trait GetListReply
- object GetListReply {
- final case class EntityList(xs: Seq[(PatientLabel, Boolean)], totalFound: Int) extends GetListReply
-
- case object AuthorizationError
- extends GetListReply with DomainError.AuthorizationError with DefaultAccessDeniedError
-
- case object PatientNotFoundError
- extends GetListReply with DefaultPatientNotFoundError with DomainError.NotFoundError
-
- final case class CommonError(userMessage: String) extends GetListReply with DomainError
- }
-
- sealed trait GetDefiningCriteriaListReply
- object GetDefiningCriteriaListReply {
- final case class EntityList(xs: Seq[PatientLabel], totalFound: Int) extends GetDefiningCriteriaListReply
-
- case object AuthorizationError
- extends GetDefiningCriteriaListReply with DomainError.AuthorizationError with DefaultAccessDeniedError
-
- case object PatientNotFoundError
- extends GetDefiningCriteriaListReply with DefaultPatientNotFoundError with DomainError.NotFoundError
-
- final case class CommonError(userMessage: String) extends GetDefiningCriteriaListReply with DomainError
- }
-
- sealed trait GetByLabelIdReply
- object GetByLabelIdReply {
- final case class Entity(x: PatientLabel, isVerified: Boolean) extends GetByLabelIdReply
-
- type Error = GetByLabelIdReply with DomainError
-
- case object NotFoundError extends GetByLabelIdReply with DefaultNotFoundError with DomainError.NotFoundError
-
- case object PatientNotFoundError
- extends GetByLabelIdReply with DefaultPatientNotFoundError with DomainError.NotFoundError
-
- case object AuthorizationError
- extends GetByLabelIdReply with DomainError.AuthorizationError with DefaultAccessDeniedError
-
- final case class CommonError(userMessage: String) extends GetByLabelIdReply with DomainError
-
- implicit def toPhiString(reply: GetByLabelIdReply): PhiString = reply match {
- case x: DomainError => phi"GetByIdReply.Error($x)"
- case Entity(x, y) => phi"GetByIdReply.Entity($x, $y)"
- }
- }
-
- sealed trait UpdateReply
- object UpdateReply {
- type Error = UpdateReply with DomainError
-
- final case class Updated(updated: PatientLabel, isVerified: Boolean) extends UpdateReply
-
- case object NotFoundError extends UpdateReply with DefaultNotFoundError with DomainError.NotFoundError
-
- case object PatientNotFoundError
- extends UpdateReply with DefaultPatientNotFoundError with DomainError.NotFoundError
-
- case object AuthorizationError
- extends UpdateReply with DomainError.AuthorizationError with DefaultAccessDeniedError
-
- final case class CommonError(userMessage: String) extends UpdateReply with DomainError
-
- implicit def toPhiString(reply: UpdateReply): PhiString = reply match {
- case Updated(x, y) => phi"Updated($x, $y)"
- case x: Error => DomainError.toPhiString(x)
- }
- }
-}
-
-trait PatientLabelService {
-
- import PatientLabelService._
-
- def getAll(patientId: UuidId[Patient],
- filter: SearchFilterExpr = SearchFilterExpr.Empty,
- sorting: Option[Sorting] = None,
- pagination: Option[Pagination] = None)(
- implicit requestContext: AuthenticatedRequestContext): Future[GetListReply]
-
- def getDefiningCriteriaList(patientId: UuidId[Patient],
- hypothesisId: UuidId[Hypothesis],
- pagination: Option[Pagination] = None)(
- implicit requestContext: AuthenticatedRequestContext): Future[GetDefiningCriteriaListReply]
-
- def getByLabelIdOfPatient(patientId: UuidId[Patient], labelId: LongId[Label])(
- implicit requestContext: AuthenticatedRequestContext): Future[GetByLabelIdReply]
-
- def update(origPatientLabel: PatientLabel, draftPatientLabel: PatientLabel)(
- implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply]
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/PatientService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/PatientService.scala
deleted file mode 100644
index ce70934..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/PatientService.scala
+++ /dev/null
@@ -1,95 +0,0 @@
-package xyz.driver.pdsuidomain.services
-
-import java.time.LocalDateTime
-
-import xyz.driver.pdsuicommon.auth.AuthenticatedRequestContext
-import xyz.driver.pdsuicommon.db._
-import xyz.driver.pdsuicommon.domain._
-import xyz.driver.pdsuicommon.error.DomainError
-import xyz.driver.pdsuicommon.logging._
-import xyz.driver.pdsuidomain.entities._
-
-import scala.concurrent.Future
-
-object PatientService {
-
- trait DefaultNotFoundError {
- def userMessage: String = "Patient not found"
- }
-
- trait DefaultAccessDeniedError {
- def userMessage: String = "Access denied"
- }
-
- sealed trait GetListReply
- object GetListReply {
- final case class EntityList(xs: Seq[Patient], totalFound: Int, lastUpdate: Option[LocalDateTime])
- extends GetListReply
-
- case object AuthorizationError
- extends GetListReply with DomainError.AuthorizationError with DefaultAccessDeniedError
- }
-
- sealed trait GetByIdReply
- object GetByIdReply {
- final case class Entity(x: Patient) extends GetByIdReply
-
- type Error = GetByIdReply with DomainError
-
- case object NotFoundError extends GetByIdReply with DefaultNotFoundError with DomainError.NotFoundError
-
- case object AuthorizationError
- extends GetByIdReply with DomainError.AuthorizationError with DefaultAccessDeniedError
-
- final case class CommonError(userMessage: String)(implicit requestContext: AuthenticatedRequestContext)
- extends GetByIdReply with DomainError
-
- implicit def toPhiString(reply: GetByIdReply): PhiString = reply match {
- case x: DomainError => phi"GetByIdReply.Error($x)"
- case Entity(x) => phi"GetByIdReply.Entity($x)"
- }
- }
-
- sealed trait UpdateReply
- object UpdateReply {
- type Error = UpdateReply with DomainError
-
- final case class Updated(updated: Patient) extends UpdateReply
-
- case object NotFoundError extends UpdateReply with DefaultNotFoundError with DomainError.NotFoundError
-
- case object AuthorizationError
- extends UpdateReply with DefaultAccessDeniedError with DomainError.AuthorizationError
-
- final case class CommonError(userMessage: String) extends UpdateReply with DomainError
-
- implicit def toPhiString(reply: UpdateReply): PhiString = reply match {
- case Updated(x) => phi"Updated($x)"
- case x: Error => DomainError.toPhiString(x)
- }
- }
-}
-
-trait PatientService {
-
- import PatientService._
-
- def getById(id: UuidId[Patient])(implicit requestContext: AuthenticatedRequestContext): Future[GetByIdReply]
-
- def getAll(filter: SearchFilterExpr = SearchFilterExpr.Empty,
- sorting: Option[Sorting] = None,
- pagination: Option[Pagination] = None)(
- implicit requestContext: AuthenticatedRequestContext): Future[GetListReply]
-
- def unassign(origPatient: Patient)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply]
-
- def start(origPatient: Patient)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply]
-
- def submit(origPatient: Patient)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply]
-
- def restart(origPatient: Patient)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply]
-
- def flag(origPatient: Patient)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply]
-
- def resolve(origPatient: Patient)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply]
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/ProviderTypeService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/ProviderTypeService.scala
deleted file mode 100644
index cad17a4..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/ProviderTypeService.scala
+++ /dev/null
@@ -1,26 +0,0 @@
-package xyz.driver.pdsuidomain.services
-
-import xyz.driver.pdsuicommon.auth.AuthenticatedRequestContext
-import xyz.driver.pdsuicommon.db.Sorting
-import xyz.driver.pdsuicommon.error.DomainError
-import xyz.driver.pdsuidomain.entities.ProviderType
-
-import scala.concurrent.Future
-
-object ProviderTypeService {
- sealed trait GetListReply
- object GetListReply {
- final case class EntityList(xs: Seq[ProviderType], totalFound: Int) extends GetListReply
- case object AuthorizationError extends GetListReply with DomainError.AuthorizationError {
- def userMessage: String = "Access denied"
- }
- }
-}
-
-trait ProviderTypeService {
-
- import ProviderTypeService._
-
- def getAll(sorting: Option[Sorting] = None)(
- implicit requestContext: AuthenticatedRequestContext): Future[GetListReply]
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/QueueUploadService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/QueueUploadService.scala
deleted file mode 100644
index 340733d..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/QueueUploadService.scala
+++ /dev/null
@@ -1,76 +0,0 @@
-package xyz.driver.pdsuidomain.services
-
-import xyz.driver.pdsuicommon.auth.AuthenticatedRequestContext
-import xyz.driver.pdsuicommon.concurrent.BridgeUploadQueue
-import xyz.driver.pdsuicommon.db.{Pagination, SearchFilterExpr, Sorting}
-import xyz.driver.pdsuicommon.error.DomainError
-
-import scala.concurrent.Future
-
-object QueueUploadService {
- trait DefaultNotFoundError {
- def userMessage: String = "Message not found"
- }
-
- trait DefaultAccessDeniedError {
- def userMessage: String = "Access denied"
- }
-
- sealed trait CreateReply
- object CreateReply {
- type Error = CreateReply with DomainError
-
- final case class Created(x: BridgeUploadQueue.Item) extends CreateReply
- case object AuthorizationError
- extends CreateReply with DomainError.AuthorizationError with DefaultAccessDeniedError
- final case class CommonError(userMessage: String) extends CreateReply with DomainError
- }
-
- sealed trait GetByIdReply
- object GetByIdReply {
- type Error = GetByIdReply with DomainError
-
- final case class Entity(x: BridgeUploadQueue.Item) extends GetByIdReply
- case object AuthorizationError
- extends GetByIdReply with DomainError.AuthorizationError with DefaultAccessDeniedError
- case object NotFoundError extends GetByIdReply with DomainError.NotFoundError with DefaultNotFoundError
- final case class CommonError(userMessage: String) extends GetByIdReply with DomainError
- }
-
- sealed trait GetListReply
- object GetListReply {
- type Error = GetListReply with DomainError
-
- final case class EntityList(xs: Seq[BridgeUploadQueue.Item], totalFound: Int) extends GetListReply
-
- case object AuthorizationError
- extends GetListReply with DomainError.AuthorizationError with DefaultAccessDeniedError
- }
-
- sealed trait ResetReply
- object ResetReply {
- type Error = ResetReply with DomainError
-
- final case class Updated(updated: BridgeUploadQueue.Item) extends ResetReply
- case object AuthorizationError extends ResetReply with DomainError.AuthorizationError with DefaultAccessDeniedError
- case object NotFoundError extends ResetReply with DefaultNotFoundError with DomainError.NotFoundError
- final case class CommonError(userMessage: String) extends ResetReply with DomainError
- }
-}
-
-trait QueueUploadService {
-
- import QueueUploadService._
-
- def create(kind: String, tag: String)(implicit requestContext: AuthenticatedRequestContext): Future[CreateReply]
-
- def getById(kind: String, tag: String)(implicit requestContext: AuthenticatedRequestContext): Future[GetByIdReply]
-
- def getAll(filter: SearchFilterExpr = SearchFilterExpr.Empty,
- sorting: Option[Sorting] = None,
- pagination: Option[Pagination] = None)(
- implicit requestContext: AuthenticatedRequestContext): Future[GetListReply]
-
- def reset(kind: String, tag: String)(implicit requestContext: AuthenticatedRequestContext): Future[ResetReply]
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/ScrapedTrialsService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/ScrapedTrialsService.scala
deleted file mode 100644
index 233495e..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/ScrapedTrialsService.scala
+++ /dev/null
@@ -1,53 +0,0 @@
-package xyz.driver.pdsuidomain.services
-
-import xyz.driver.pdsuicommon.error.DomainError
-import xyz.driver.pdsuidomain.entities.ScrapedTrial
-
-import scala.concurrent.Future
-
-object ScrapedTrialsService {
-
- sealed trait GetRawTrialReply
- object GetRawTrialReply {
- type Error = GetRawTrialReply with DomainError
-
- final case class TrialRawEntity(rawTrial: ScrapedTrial) extends GetRawTrialReply
-
- case object NotFoundError extends GetRawTrialReply with DomainError.NotFoundError {
- override def userMessage: String = "Raw clinical trial not found"
- }
- }
-
- sealed trait GetRawTrialOptReply
- object GetRawTrialOptReply {
- final case class TrialRawEntity(rawTrial: Option[ScrapedTrial]) extends GetRawTrialOptReply
- }
-
- sealed trait GetAllRawTrialsExceptReply
- object GetAllRawTrialsExceptReply {
- final case class MultipleRawTrials(rawTrials: Seq[ScrapedTrial]) extends GetAllRawTrialsExceptReply
- }
-
- sealed trait GetHtmlForReply
- object GetHtmlForReply {
- type TrialHtmlMap = Map[String, String]
-
- /**
- * @param trialHtmlMap nctId -> html
- */
- final case class HtmlMap(trialHtmlMap: TrialHtmlMap) extends GetHtmlForReply
- }
-}
-
-trait ScrapedTrialsService {
-
- import ScrapedTrialsService._
-
- def getRawTrial(nctId: String): Future[GetRawTrialReply]
-
- def getRawTrialOpt(nctId: String): Future[GetRawTrialOptReply]
-
- def getAllRawTrialsExcept(nctIds: Seq[String], limit: Int): Future[GetAllRawTrialsExceptReply]
-
- def getHtmlFor(nctIds: Set[String]): Future[GetHtmlForReply]
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/StudyDesignService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/StudyDesignService.scala
deleted file mode 100644
index e98c1ec..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/StudyDesignService.scala
+++ /dev/null
@@ -1,27 +0,0 @@
-package xyz.driver.pdsuidomain.services
-
-import xyz.driver.pdsuicommon.auth.AuthenticatedRequestContext
-import xyz.driver.pdsuicommon.db.Sorting
-import xyz.driver.pdsuicommon.error.DomainError
-import xyz.driver.pdsuidomain.entities.StudyDesign
-
-import scala.concurrent.Future
-
-object StudyDesignService {
- sealed trait GetListReply
- object GetListReply {
- final case class EntityList(xs: Seq[StudyDesign], totalFound: Int) extends GetListReply
-
- case object AuthorizationError extends GetListReply with DomainError.AuthorizationError {
- def userMessage: String = "Access denied"
- }
- }
-}
-
-trait StudyDesignService {
-
- import StudyDesignService._
-
- def getAll(sorting: Option[Sorting] = None)(
- implicit requestContext: AuthenticatedRequestContext): Future[GetListReply]
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/TrialHistoryService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/TrialHistoryService.scala
deleted file mode 100644
index bcf1c53..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/TrialHistoryService.scala
+++ /dev/null
@@ -1,44 +0,0 @@
-package xyz.driver.pdsuidomain.services
-
-import java.time.LocalDateTime
-
-import xyz.driver.pdsuicommon.auth.AuthenticatedRequestContext
-import xyz.driver.pdsuicommon.db.{Pagination, SearchFilterExpr, Sorting}
-import xyz.driver.pdsuicommon.domain.StringId
-import xyz.driver.pdsuicommon.error.DomainError
-import xyz.driver.pdsuidomain.entities.{Trial, TrialHistory}
-
-import scala.concurrent.Future
-
-object TrialHistoryService {
-
- trait DefaultNotFoundError {
- def userMessage: String = "Trial not found"
- }
-
- trait DefaultAccessDeniedError {
- def userMessage: String = "Access denied"
- }
-
- sealed trait GetListReply
- object GetListReply {
- final case class EntityList(xs: Seq[TrialHistory], totalFound: Int, lastUpdate: Option[LocalDateTime])
- extends GetListReply
-
- final case object AuthorizationError
- extends GetListReply with DomainError.AuthorizationError with DefaultAccessDeniedError
- }
-
-}
-
-trait TrialHistoryService {
-
- import TrialHistoryService._
-
- def getListByTrialId(id: StringId[Trial],
- filter: SearchFilterExpr = SearchFilterExpr.Empty,
- sorting: Option[Sorting] = None,
- pagination: Option[Pagination] = None)(
- implicit requestContext: AuthenticatedRequestContext): Future[GetListReply]
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/TrialIssueService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/TrialIssueService.scala
deleted file mode 100644
index 726feda..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/TrialIssueService.scala
+++ /dev/null
@@ -1,93 +0,0 @@
-package xyz.driver.pdsuidomain.services
-
-import java.time.LocalDateTime
-
-import xyz.driver.pdsuicommon.auth.AuthenticatedRequestContext
-import xyz.driver.pdsuicommon.db.{Pagination, SearchFilterExpr, Sorting}
-import xyz.driver.pdsuicommon.domain.{LongId, StringId}
-import xyz.driver.pdsuicommon.error.DomainError
-import xyz.driver.pdsuidomain.entities.{Trial, TrialIssue}
-
-import scala.concurrent.Future
-
-object TrialIssueService {
-
- trait DefaultNotFoundError {
- def userMessage: String = "TrialIssue not found"
- }
-
- trait DefaultAccessDeniedError {
- def userMessage: String = "Access denied"
- }
-
- sealed trait CreateReply
- object CreateReply {
- type Error = CreateReply with DomainError
- final case class Created(x: TrialIssue) extends CreateReply
- case object AuthorizationError
- extends CreateReply with DomainError.AuthorizationError with DefaultAccessDeniedError
- final case class CommonError(userMessage: String) extends CreateReply with DomainError
- }
-
- sealed trait GetByIdReply
- object GetByIdReply {
- type Error = GetByIdReply with DomainError
- final case class Entity(x: TrialIssue) extends GetByIdReply
- case object NotFoundError extends GetByIdReply with DomainError.NotFoundError with DefaultNotFoundError
- final case class CommonError(userMessage: String) extends GetByIdReply with DomainError
- case object AuthorizationError
- extends GetByIdReply with DomainError.AuthorizationError with DefaultAccessDeniedError
- }
-
- sealed trait GetListByTrialIdReply
- object GetListByTrialIdReply {
- type Error = GetListByTrialIdReply with DomainError
- final case class EntityList(xs: Seq[TrialIssue], totalFound: Int, lastUpdate: Option[LocalDateTime])
- extends GetListByTrialIdReply
- case object NotFoundError extends GetListByTrialIdReply with DomainError.NotFoundError with DefaultNotFoundError
- case object AuthorizationError
- extends GetListByTrialIdReply with DomainError.AuthorizationError with DefaultAccessDeniedError
- }
-
- sealed trait UpdateReply
- object UpdateReply {
- type Error = UpdateReply with DomainError
- final case class Updated(updated: TrialIssue) extends UpdateReply
- case object AuthorizationError
- extends UpdateReply with DomainError.AuthorizationError with DefaultAccessDeniedError
- final case class CommonError(userMessage: String) extends UpdateReply with DomainError
- }
-
- sealed trait DeleteReply
- object DeleteReply {
- type Error = DeleteReply with DomainError
- case object Deleted extends DeleteReply
- case object AuthorizationError
- extends DeleteReply with DomainError.AuthorizationError with DefaultAccessDeniedError
- case object NotFoundError extends DeleteReply with DomainError.NotFoundError with DefaultNotFoundError
- final case class CommonError(userMessage: String) extends DeleteReply with DomainError
- }
-}
-
-trait TrialIssueService {
-
- import TrialIssueService._
-
- def create(draft: TrialIssue)(implicit requestContext: AuthenticatedRequestContext): Future[CreateReply]
-
- def getById(trialId: StringId[Trial], id: LongId[TrialIssue])(
- implicit requestContext: AuthenticatedRequestContext): Future[GetByIdReply]
-
- def getListByTrialId(trialId: StringId[Trial],
- filter: SearchFilterExpr = SearchFilterExpr.Empty,
- sorting: Option[Sorting] = None,
- pagination: Option[Pagination] = None)(
- implicit requestContext: AuthenticatedRequestContext): Future[GetListByTrialIdReply]
-
- def update(orig: TrialIssue, draft: TrialIssue)(
- implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply]
-
- def delete(trialId: StringId[Trial], id: LongId[TrialIssue])(
- implicit requestContext: AuthenticatedRequestContext): Future[DeleteReply]
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/TrialService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/TrialService.scala
deleted file mode 100644
index 5bd99a8..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/TrialService.scala
+++ /dev/null
@@ -1,125 +0,0 @@
-package xyz.driver.pdsuidomain.services
-
-import java.time.LocalDateTime
-
-import akka.NotUsed
-import akka.stream.scaladsl.Source
-import akka.util.ByteString
-import xyz.driver.pdsuicommon.auth.AuthenticatedRequestContext
-import xyz.driver.pdsuicommon.db._
-import xyz.driver.pdsuicommon.domain.StringId
-import xyz.driver.pdsuicommon.error.DomainError
-import xyz.driver.pdsuicommon.logging._
-import xyz.driver.pdsuidomain.entities.Trial
-import xyz.driver.pdsuidomain.entities.export.trial.ExportTrialWithLabels
-
-import scala.concurrent.Future
-
-object TrialService {
-
- trait DefaultNotFoundError {
- def userMessage: String = "Trial not found"
- }
-
- trait DefaultAccessDeniedError {
- def userMessage: String = "Access denied"
- }
-
- sealed trait GetListReply
- object GetListReply {
- final case class EntityList(xs: Seq[Trial], totalFound: Int, lastUpdate: Option[LocalDateTime])
- extends GetListReply
-
- case object AuthorizationError
- extends GetListReply with DomainError.AuthorizationError with DefaultAccessDeniedError
- }
-
- sealed trait GetByIdReply
- object GetByIdReply {
- final case class Entity(x: Trial) extends GetByIdReply
-
- type Error = GetByIdReply with DomainError
-
- case object NotFoundError extends GetByIdReply with DefaultNotFoundError with DomainError.NotFoundError
-
- case object AuthorizationError
- extends GetByIdReply with DomainError.AuthorizationError with DefaultAccessDeniedError
-
- final case class CommonError(userMessage: String)(implicit requestContext: AuthenticatedRequestContext)
- extends GetByIdReply with DomainError
-
- implicit def toPhiString(reply: GetByIdReply): PhiString = reply match {
- case x: DomainError => phi"GetByIdReply.Error($x)"
- case Entity(x) => phi"GetByIdReply.Entity($x)"
- }
- }
-
- sealed trait GetTrialWithLabelsReply
- object GetTrialWithLabelsReply {
- type Error = GetTrialWithLabelsReply with DomainError
-
- final case class Entity(x: ExportTrialWithLabels) extends GetTrialWithLabelsReply
-
- case object NotFoundError extends GetTrialWithLabelsReply with DomainError.NotFoundError {
- def userMessage: String = "Trial not found"
- }
-
- case object AuthorizationError
- extends GetTrialWithLabelsReply with DomainError.AuthorizationError with DefaultAccessDeniedError
- }
-
- sealed trait UpdateReply
- object UpdateReply {
- type Error = UpdateReply with DomainError
-
- final case class Updated(updated: Trial) extends UpdateReply
-
- case object NotFoundError extends UpdateReply with DefaultNotFoundError with DomainError.NotFoundError
-
- case object AuthorizationError
- extends UpdateReply with DefaultAccessDeniedError with DomainError.AuthorizationError
-
- final case class CommonError(userMessage: String) extends UpdateReply with DomainError
-
- implicit def toPhiString(reply: UpdateReply): PhiString = reply match {
- case Updated(x) => phi"Updated($x)"
- case x: Error => DomainError.toPhiString(x)
- }
- }
-}
-
-trait TrialService {
-
- import TrialService._
-
- def getById(id: StringId[Trial])(implicit requestContext: AuthenticatedRequestContext): Future[GetByIdReply]
-
- def getTrialWithLabels(trialId: StringId[Trial], condition: String)(
- implicit requestContext: AuthenticatedRequestContext): Future[GetTrialWithLabelsReply]
-
- def getPdfSource(trialId: StringId[Trial])(
- implicit requestContext: AuthenticatedRequestContext): Future[Source[ByteString, NotUsed]]
-
- def getAll(filter: SearchFilterExpr = SearchFilterExpr.Empty,
- sorting: Option[Sorting] = None,
- pagination: Option[Pagination] = None)(
- implicit requestContext: AuthenticatedRequestContext): Future[GetListReply]
-
- def update(origTrial: Trial, draftTrial: Trial)(
- implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply]
-
- def start(origTrial: Trial)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply]
-
- def submit(origTrial: Trial)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply]
-
- def restart(origTrial: Trial)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply]
-
- def flag(origTrial: Trial)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply]
-
- def resolve(origTrial: Trial)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply]
-
- def archive(origTrial: Trial)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply]
-
- def unassign(origTrial: Trial)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply]
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/UserHistoryService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/UserHistoryService.scala
deleted file mode 100644
index a29e041..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/UserHistoryService.scala
+++ /dev/null
@@ -1,30 +0,0 @@
-package xyz.driver.pdsuidomain.services
-
-import xyz.driver.pdsuicommon.auth.AuthenticatedRequestContext
-import xyz.driver.pdsuicommon.db.{Pagination, SearchFilterExpr, Sorting}
-import xyz.driver.pdsuicommon.error.DomainError
-import xyz.driver.pdsuidomain.entities.UserHistory
-
-import scala.concurrent.Future
-
-object UserHistoryService {
-
- sealed trait GetListReply
- object GetListReply {
- final case class EntityList(xs: Seq[UserHistory], totalFound: Int) extends GetListReply
-
- case object AuthorizationError extends GetListReply with DomainError.AuthorizationError {
- def userMessage: String = "Access denied"
- }
- }
-}
-
-trait UserHistoryService {
-
- import UserHistoryService._
-
- def getAll(filter: SearchFilterExpr = SearchFilterExpr.Empty,
- sorting: Option[Sorting] = None,
- pagination: Option[Pagination] = None)(
- implicit requestContext: AuthenticatedRequestContext): Future[GetListReply]
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/fake/FakeTrialService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/fake/FakeTrialService.scala
deleted file mode 100644
index 3793c1f..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/fake/FakeTrialService.scala
+++ /dev/null
@@ -1,109 +0,0 @@
-package xyz.driver.pdsuidomain.services.fake
-
-import java.time.LocalDateTime
-
-import akka.NotUsed
-import akka.stream.scaladsl.Source
-import akka.util.ByteString
-import xyz.driver.core.generators
-import xyz.driver.pdsuicommon.auth.AuthenticatedRequestContext
-import xyz.driver.pdsuicommon.db._
-import xyz.driver.pdsuicommon.domain.{LongId, StringId, UuidId}
-import xyz.driver.pdsuidomain.entities.{Arm, Criterion, Label, Trial}
-import xyz.driver.pdsuidomain.entities.export.trial.{ExportTrialArm, ExportTrialLabelCriterion, ExportTrialWithLabels}
-import xyz.driver.pdsuidomain.services.TrialService
-
-import scala.concurrent.Future
-
-class FakeTrialService extends TrialService {
-
- import TrialService._
-
- private val trial = Trial(
- id = StringId(""),
- externalId = UuidId(),
- status = Trial.Status.New,
- assignee = None,
- previousStatus = None,
- previousAssignee = None,
- lastActiveUserId = None,
- lastUpdate = LocalDateTime.now(),
- condition = Trial.Condition.Breast,
- phase = "",
- hypothesisId = None,
- studyDesignId = None,
- originalStudyDesign = None,
- isPartner = false,
- overview = None,
- overviewTemplate = "",
- isUpdated = false,
- title = "",
- originalTitle = ""
- )
-
- def getById(id: StringId[Trial])(implicit requestContext: AuthenticatedRequestContext): Future[GetByIdReply] =
- Future.successful(
- GetByIdReply.Entity(trial)
- )
-
- def getPdfSource(trialId: StringId[Trial])(
- implicit requestContext: AuthenticatedRequestContext): Future[Source[ByteString, NotUsed]] =
- Future.failed(new NotImplementedError("fake pdf download is not implemented"))
-
- def getAll(filter: SearchFilterExpr = SearchFilterExpr.Empty,
- sorting: Option[Sorting] = None,
- pagination: Option[Pagination] = None)(
- implicit requestContext: AuthenticatedRequestContext): Future[GetListReply] =
- Future.successful(GetListReply.EntityList(Seq(trial), 1, None))
-
- override def getTrialWithLabels(trialId: StringId[Trial], condition: String)(
- implicit requestContext: AuthenticatedRequestContext): Future[GetTrialWithLabelsReply] = {
- Future.successful(
- GetTrialWithLabelsReply.Entity(ExportTrialWithLabels(
- StringId[Trial]("NCT" + generators.nextInt(999999).toString),
- UuidId[Trial](generators.nextUuid()),
- generators.oneOf("adenocarcinoma", "breast", "prostate"),
- LocalDateTime.now(),
- labelVersion = 1L,
- generators.listOf(new ExportTrialArm(
- LongId[Arm](generators.nextInt(999999).toLong),
- generators.nextName().value
- )),
- generators.listOf(new ExportTrialLabelCriterion(
- LongId[Criterion](generators.nextInt(999999).toLong),
- generators.nextOption(generators.nextBoolean()),
- LongId[Label](generators.nextInt(999999).toLong),
- generators.setOf(LongId[Arm](generators.nextInt(999999).toLong)),
- generators.nextName().value,
- generators.nextBoolean(),
- generators.nextBoolean()
- ))
- )))
- }
-
- def update(origTrial: Trial, draftTrial: Trial)(
- implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] =
- Future.successful(UpdateReply.Updated(draftTrial))
-
- def start(origTrial: Trial)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] =
- update(origTrial, origTrial)
-
- def submit(origTrial: Trial)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] =
- update(origTrial, origTrial)
-
- def restart(origTrial: Trial)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] =
- update(origTrial, origTrial)
-
- def flag(origTrial: Trial)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] =
- update(origTrial, origTrial)
-
- def resolve(origTrial: Trial)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] =
- update(origTrial, origTrial)
-
- def archive(origTrial: Trial)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] =
- update(origTrial, origTrial)
-
- def unassign(origTrial: Trial)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] =
- update(origTrial, origTrial)
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestArmService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestArmService.scala
deleted file mode 100644
index 2b4e858..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestArmService.scala
+++ /dev/null
@@ -1,81 +0,0 @@
-package xyz.driver.pdsuidomain.services.rest
-
-import scala.concurrent.{ExecutionContext, Future}
-
-import akka.http.scaladsl.marshalling.Marshal
-import akka.http.scaladsl.model._
-import akka.stream.Materializer
-import xyz.driver.core.rest.{Pagination => _, _}
-import xyz.driver.pdsuicommon.auth._
-import xyz.driver.pdsuicommon.db._
-import xyz.driver.pdsuicommon.domain._
-import xyz.driver.pdsuidomain.entities._
-import xyz.driver.pdsuidomain.formats.json.ListResponse
-import xyz.driver.pdsuidomain.formats.json.arm.ApiArm
-import xyz.driver.pdsuidomain.services.ArmService
-
-class RestArmService(transport: ServiceTransport, baseUri: Uri)(implicit protected val materializer: Materializer,
- protected val exec: ExecutionContext)
- extends ArmService with RestHelper {
-
- import xyz.driver.pdsuicommon.serialization.PlayJsonSupport._
- import xyz.driver.pdsuidomain.services.ArmService._
-
- def getAll(filter: SearchFilterExpr = SearchFilterExpr.Empty,
- sorting: Option[Sorting] = None,
- pagination: Option[Pagination] = None)(
- implicit requestContext: AuthenticatedRequestContext): Future[GetListReply] = {
- val request = HttpRequest(
- HttpMethods.GET,
- endpointUri(baseUri, "/v1/arm", filterQuery(filter) ++ sortingQuery(sorting) ++ paginationQuery(pagination)))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ListResponse[ApiArm]](response)
- } yield {
- GetListReply.EntityList(reply.items.map(_.toDomain), reply.meta.itemsCount)
- }
- }
-
- def getById(armId: LongId[Arm])(implicit requestContext: AuthenticatedRequestContext): Future[GetByIdReply] = {
- val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/arm/$armId"))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ApiArm](response)
- } yield {
- GetByIdReply.Entity(reply.toDomain)
- }
- }
-
- def create(draftArm: Arm)(implicit requestContext: AuthenticatedRequestContext): Future[CreateReply] = {
- for {
- entity <- Marshal(ApiArm.fromDomain(draftArm)).to[RequestEntity]
- request = HttpRequest(HttpMethods.POST, endpointUri(baseUri, "/v1/arm")).withEntity(entity)
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ApiArm](response)
- } yield {
- CreateReply.Created(reply.toDomain)
- }
- }
-
- def update(origArm: Arm, draftArm: Arm)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] = {
- val id = origArm.id
- val request = HttpRequest(HttpMethods.PATCH, endpointUri(baseUri, s"/v1/arm/$id"))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ApiArm](response)
- } yield {
- UpdateReply.Updated(reply.toDomain)
- }
- }
-
- def delete(id: LongId[Arm])(implicit requestContext: AuthenticatedRequestContext): Future[DeleteReply] = {
- val request = HttpRequest(HttpMethods.DELETE, endpointUri(baseUri, s"/v1/arm/$id"))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- _ <- apiResponse[HttpEntity](response)
- } yield {
- DeleteReply.Deleted
- }
- }
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestCriterionService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestCriterionService.scala
deleted file mode 100644
index f0f4de8..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestCriterionService.scala
+++ /dev/null
@@ -1,86 +0,0 @@
-package xyz.driver.pdsuidomain.services.rest
-
-import scala.concurrent.{ExecutionContext, Future}
-
-import akka.http.scaladsl.marshalling.Marshal
-import akka.http.scaladsl.model._
-import akka.stream.Materializer
-import xyz.driver.core.rest.{Pagination => _, _}
-import xyz.driver.pdsuicommon.auth._
-import xyz.driver.pdsuicommon.db._
-import xyz.driver.pdsuicommon.domain._
-import xyz.driver.pdsuidomain.entities._
-import xyz.driver.pdsuidomain.formats.json.ListResponse
-import xyz.driver.pdsuidomain.services.CriterionService
-
-class RestCriterionService(transport: ServiceTransport, baseUri: Uri)(
- implicit protected val materializer: Materializer,
- protected val exec: ExecutionContext)
- extends CriterionService with RestHelper {
-
- import xyz.driver.pdsuicommon.serialization.PlayJsonSupport._
- import xyz.driver.pdsuidomain.formats.json.criterion.ApiCriterion
- import xyz.driver.pdsuidomain.services.CriterionService._
-
- def create(draftRichCriterion: RichCriterion)(
- implicit requestContext: AuthenticatedRequestContext): Future[CreateReply] = {
- for {
- entity <- Marshal(ApiCriterion.fromDomain(draftRichCriterion)).to[RequestEntity]
- request = HttpRequest(HttpMethods.POST, endpointUri(baseUri, "/v1/criterion")).withEntity(entity)
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ApiCriterion](response)
- } yield {
- CreateReply.Created(reply.toDomain)
- }
- }
-
- def getById(id: LongId[Criterion])(implicit requestContext: AuthenticatedRequestContext): Future[GetByIdReply] = {
- val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/criterion/$id"))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ApiCriterion](response)
- } yield {
- GetByIdReply.Entity(reply.toDomain)
- }
- }
-
- def getAll(filter: SearchFilterExpr = SearchFilterExpr.Empty,
- sorting: Option[Sorting] = None,
- pagination: Option[Pagination] = None)(
- implicit requestContext: AuthenticatedRequestContext): Future[GetListReply] = {
- val request = HttpRequest(HttpMethods.GET,
- endpointUri(baseUri,
- s"/v1/criterion",
- filterQuery(filter) ++ sortingQuery(sorting) ++ paginationQuery(pagination)))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ListResponse[ApiCriterion]](response)
- } yield {
- GetListReply.EntityList(reply.items.map(_.toDomain), reply.meta.itemsCount, reply.meta.lastUpdate)
- }
- }
-
- def update(origRichCriterion: RichCriterion, draftRichCriterion: RichCriterion)(
- implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] = {
- val id = origRichCriterion.criterion.id
- for {
- entity <- Marshal(ApiCriterion.fromDomain(draftRichCriterion)).to[RequestEntity]
- request = HttpRequest(HttpMethods.PATCH, endpointUri(baseUri, s"/v1/criterion/$id")).withEntity(entity)
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ApiCriterion](response)
- } yield {
- UpdateReply.Updated(reply.toDomain)
- }
- }
-
- def delete(id: LongId[Criterion])(implicit requestContext: AuthenticatedRequestContext): Future[DeleteReply] = {
- val request = HttpRequest(HttpMethods.DELETE, endpointUri(baseUri, s"/v1/criterion/$id"))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- _ <- apiResponse[HttpEntity](response)
- } yield {
- DeleteReply.Deleted
- }
- }
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestDocumentService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestDocumentService.scala
deleted file mode 100644
index 68fdde1..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestDocumentService.scala
+++ /dev/null
@@ -1,111 +0,0 @@
-package xyz.driver.pdsuidomain.services.rest
-
-import scala.concurrent.{ExecutionContext, Future}
-
-import akka.http.scaladsl.marshalling.Marshal
-import akka.http.scaladsl.model._
-import akka.stream.Materializer
-import xyz.driver.core.rest.{Pagination => _, _}
-import xyz.driver.pdsuicommon.auth._
-import xyz.driver.pdsuicommon.db._
-import xyz.driver.pdsuicommon.domain._
-import xyz.driver.pdsuidomain.entities._
-import xyz.driver.pdsuidomain.formats.json.ListResponse
-import xyz.driver.pdsuidomain.formats.json.document.ApiDocument
-import xyz.driver.pdsuidomain.services.DocumentService
-
-class RestDocumentService(transport: ServiceTransport, baseUri: Uri)(implicit protected val materializer: Materializer,
- protected val exec: ExecutionContext)
- extends DocumentService with RestHelper {
-
- import xyz.driver.pdsuicommon.serialization.PlayJsonSupport._
- import xyz.driver.pdsuidomain.services.DocumentService._
-
- def getById(id: LongId[Document])(implicit requestContext: AuthenticatedRequestContext): Future[GetByIdReply] = {
- val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/document/$id"))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ApiDocument](response)
- } yield {
- GetByIdReply.Entity(reply.toDomain)
- }
- }
-
- def getAll(filter: SearchFilterExpr = SearchFilterExpr.Empty,
- sorting: Option[Sorting] = None,
- pagination: Option[Pagination] = None)(
- implicit requestContext: AuthenticatedRequestContext): Future[GetListReply] = {
-
- val request = HttpRequest(HttpMethods.GET,
- endpointUri(baseUri,
- "/v1/document",
- filterQuery(filter) ++ sortingQuery(sorting) ++ paginationQuery(pagination)))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ListResponse[ApiDocument]](response)
- } yield {
- GetListReply.EntityList(reply.items.map(_.toDomain), reply.meta.itemsCount, reply.meta.lastUpdate)
- }
- }
-
- def create(draftDocument: Document)(implicit requestContext: AuthenticatedRequestContext): Future[CreateReply] = {
- for {
- entity <- Marshal(ApiDocument.fromDomain(draftDocument)).to[RequestEntity]
- request = HttpRequest(HttpMethods.POST, endpointUri(baseUri, "/v1/document")).withEntity(entity)
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ApiDocument](response)
- } yield {
- CreateReply.Created(reply.toDomain)
- }
- }
-
- def update(orig: Document, draft: Document)(
- implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] = {
- for {
- entity <- Marshal(ApiDocument.fromDomain(draft)).to[RequestEntity]
- request = HttpRequest(HttpMethods.PATCH, endpointUri(baseUri, s"/v1/document/${orig.id}")).withEntity(entity)
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ApiDocument](response)
- } yield {
- UpdateReply.Updated(reply.toDomain)
- }
- }
-
- def delete(id: LongId[Document])(implicit requestContext: AuthenticatedRequestContext): Future[DeleteReply] = {
- val request = HttpRequest(HttpMethods.DELETE, endpointUri(baseUri, s"/v1/document/$id"))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- _ <- apiResponse[HttpEntity](response)
- } yield {
- DeleteReply.Deleted
- }
- }
-
- private def editAction(orig: Document, action: String)(
- implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] = {
- val id = orig.id.toString
- val request = HttpRequest(HttpMethods.POST, endpointUri(baseUri, s"/v1/document/$id/$action"))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ApiDocument](response)
- } yield {
- UpdateReply.Updated(reply.toDomain)
- }
- }
-
- def start(orig: Document)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] =
- editAction(orig, "start")
- def submit(orig: Document)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] =
- editAction(orig, "submit")
- def restart(orig: Document)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] =
- editAction(orig, "restart")
- def flag(orig: Document)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] =
- editAction(orig, "flag")
- def resolve(orig: Document)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] =
- editAction(orig, "resolve")
- def unassign(orig: Document)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] =
- editAction(orig, "unassign")
- def archive(orig: Document)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] =
- editAction(orig, "archive")
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestDocumentTypeService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestDocumentTypeService.scala
deleted file mode 100644
index caa0042..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestDocumentTypeService.scala
+++ /dev/null
@@ -1,32 +0,0 @@
-package xyz.driver.pdsuidomain.services.rest
-
-import scala.concurrent.{ExecutionContext, Future}
-
-import akka.http.scaladsl.model._
-import akka.stream.Materializer
-import xyz.driver.core.rest.{Pagination => _, _}
-import xyz.driver.pdsuicommon.auth._
-import xyz.driver.pdsuicommon.db._
-import xyz.driver.pdsuidomain.formats.json.ListResponse
-import xyz.driver.pdsuidomain.services.DocumentTypeService
-import xyz.driver.pdsuidomain.formats.json.document.ApiDocumentType
-
-class RestDocumentTypeService(transport: ServiceTransport, baseUri: Uri)(
- implicit protected val materializer: Materializer,
- protected val exec: ExecutionContext)
- extends DocumentTypeService with RestHelper {
-
- import xyz.driver.pdsuicommon.serialization.PlayJsonSupport._
- import xyz.driver.pdsuidomain.services.DocumentTypeService._
-
- def getAll(sorting: Option[Sorting] = None)(
- implicit requestContext: AuthenticatedRequestContext): Future[GetListReply] = {
- val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, "/v1/document-type", sortingQuery(sorting)))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ListResponse[ApiDocumentType]](response)
- } yield {
- GetListReply.EntityList(reply.items.map(_.toDomain), reply.meta.itemsCount)
- }
- }
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestExtractedDataService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestExtractedDataService.scala
deleted file mode 100644
index 53b9f38..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestExtractedDataService.scala
+++ /dev/null
@@ -1,97 +0,0 @@
-package xyz.driver.pdsuidomain.services.rest
-
-import scala.concurrent.{ExecutionContext, Future}
-
-import akka.http.scaladsl.marshalling.Marshal
-import akka.http.scaladsl.model._
-import akka.stream.Materializer
-import xyz.driver.core.rest.{Pagination => _, _}
-import xyz.driver.pdsuicommon.auth._
-import xyz.driver.pdsuicommon.db._
-import xyz.driver.pdsuicommon.domain._
-import xyz.driver.pdsuidomain.entities._
-import xyz.driver.pdsuidomain.formats.json.ListResponse
-import xyz.driver.pdsuidomain.formats.json.export.ApiExportPatientWithLabels
-import xyz.driver.pdsuidomain.formats.json.extracteddata.ApiExtractedData
-import xyz.driver.pdsuidomain.services.ExtractedDataService
-
-class RestExtractedDataService(transport: ServiceTransport, baseUri: Uri)(
- implicit protected val materializer: Materializer,
- protected val exec: ExecutionContext)
- extends ExtractedDataService with RestHelper {
-
- import xyz.driver.pdsuicommon.serialization.PlayJsonSupport._
- import xyz.driver.pdsuidomain.services.ExtractedDataService._
-
- def getById(id: LongId[ExtractedData])(implicit requestContext: AuthenticatedRequestContext): Future[GetByIdReply] = {
- val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/extracted-data/$id"))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ApiExtractedData](response)
- } yield {
- GetByIdReply.Entity(reply.toDomain)
- }
- }
-
- def getAll(filter: SearchFilterExpr = SearchFilterExpr.Empty,
- sorting: Option[Sorting] = None,
- pagination: Option[Pagination] = None)(
- implicit requestContext: AuthenticatedRequestContext): Future[GetListReply] = {
- val request = HttpRequest(HttpMethods.GET,
- endpointUri(baseUri,
- "/v1/extracted-data",
- filterQuery(filter) ++ sortingQuery(sorting) ++ paginationQuery(pagination)))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ListResponse[ApiExtractedData]](response)
- } yield {
- GetListReply.EntityList(reply.items.map(_.toDomain), reply.meta.itemsCount)
- }
- }
-
- def create(draftRichExtractedData: RichExtractedData)(
- implicit requestContext: AuthenticatedRequestContext): Future[CreateReply] = {
- for {
- entity <- Marshal(ApiExtractedData.fromDomain(draftRichExtractedData)).to[RequestEntity]
- request = HttpRequest(HttpMethods.POST, endpointUri(baseUri, "/v1/extracted-data")).withEntity(entity)
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ApiExtractedData](response)
- } yield {
- CreateReply.Created(reply.toDomain)
- }
- }
- def update(origRichExtractedData: RichExtractedData, draftRichExtractedData: RichExtractedData)(
- implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] = {
- val id = origRichExtractedData.extractedData.id
- for {
- entity <- Marshal(ApiExtractedData.fromDomain(draftRichExtractedData)).to[RequestEntity]
- request = HttpRequest(HttpMethods.PATCH, endpointUri(baseUri, s"/v1/extracted-data/$id")).withEntity(entity)
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ApiExtractedData](response)
- } yield {
- UpdateReply.Updated(reply.toDomain)
- }
- }
-
- def delete(id: LongId[ExtractedData])(implicit requestContext: AuthenticatedRequestContext): Future[DeleteReply] = {
- val request = HttpRequest(HttpMethods.DELETE, endpointUri(baseUri, s"/v1/export-data/$id"))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- _ <- apiResponse[HttpEntity](response)
- } yield {
- DeleteReply.Deleted
- }
- }
-
- def getPatientLabels(id: UuidId[Patient])(
- implicit requestContext: AuthenticatedRequestContext): Future[GetPatientLabelsReply] = {
- val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/export/patient/$id"))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ApiExportPatientWithLabels](response)
- } yield {
- GetPatientLabelsReply.Entity(reply.toDomain)
- }
- }
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestHelper.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestHelper.scala
deleted file mode 100644
index 0ff29ef..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestHelper.scala
+++ /dev/null
@@ -1,128 +0,0 @@
-package xyz.driver.pdsuidomain.services.rest
-
-import scala.concurrent.{ExecutionContext, Future}
-import akka.http.scaladsl.model.{HttpResponse, ResponseEntity, StatusCodes, Uri}
-import akka.http.scaladsl.unmarshalling.{Unmarshal, Unmarshaller}
-import akka.stream.Materializer
-import xyz.driver.core.rest.{ContextHeaders, ServiceRequestContext}
-import xyz.driver.pdsuicommon.auth.{AnonymousRequestContext, AuthenticatedRequestContext}
-import xyz.driver.pdsuicommon.db.{
- Pagination,
- SearchFilterBinaryOperation,
- SearchFilterExpr,
- SearchFilterNAryOperation,
- Sorting,
- SortingOrder
-}
-import xyz.driver.pdsuicommon.error._
-
-trait RestHelper {
-
- implicit protected val materializer: Materializer
- implicit protected val exec: ExecutionContext
-
- protected def endpointUri(baseUri: Uri, path: String) =
- baseUri.withPath(Uri.Path(path))
-
- protected def endpointUri(baseUri: Uri, path: String, query: Seq[(String, String)]) =
- baseUri.withPath(Uri.Path(path)).withQuery(Uri.Query(query: _*))
-
- def sortingQuery(sorting: Option[Sorting]): Seq[(String, String)] = {
- def dimensionQuery(dimension: Sorting.Dimension) = {
- val ord = dimension.order match {
- case SortingOrder.Ascending => ""
- case SortingOrder.Descending => "-"
- }
- s"$ord${dimension.name}"
- }
-
- sorting match {
- case None => Seq.empty
- case Some(dimension: Sorting.Dimension) => Seq("sort" -> dimensionQuery(dimension))
- case Some(Sorting.Sequential(dimensions)) => Seq("sort" -> dimensions.map(dimensionQuery).mkString(","))
- }
- }
-
- def filterQuery(expr: SearchFilterExpr): Seq[(String, String)] = {
- def opToString(op: SearchFilterBinaryOperation) = op match {
- case SearchFilterBinaryOperation.Eq => "eq"
- case SearchFilterBinaryOperation.NotEq => "ne"
- case SearchFilterBinaryOperation.Like => "like"
- case SearchFilterBinaryOperation.Gt => "gt"
- case SearchFilterBinaryOperation.GtEq => "ge"
- case SearchFilterBinaryOperation.Lt => "lt"
- case SearchFilterBinaryOperation.LtEq => "le"
- }
-
- def exprToQuery(expr: SearchFilterExpr): Seq[(String, String)] = expr match {
- case SearchFilterExpr.Empty => Seq.empty
- case SearchFilterExpr.Atom.Binary(dimension, op, value) =>
- Seq("filters" -> s"${dimension.name} ${opToString(op)} $value")
- case SearchFilterExpr.Atom.NAry(dimension, SearchFilterNAryOperation.In, values) =>
- Seq("filters" -> s"${dimension.name} in ${values.mkString(",")}")
- case SearchFilterExpr.Intersection(ops) =>
- ops.flatMap(op => exprToQuery(op))
- case expr => sys.error(s"No parser available for filter expression $expr.")
- }
-
- exprToQuery(expr)
- }
-
- def paginationQuery(pagination: Option[Pagination]): Seq[(String, String)] = pagination match {
- case None => Seq.empty
- case Some(pp) =>
- Seq(
- "pageNumber" -> pp.pageNumber.toString,
- "pageSize" -> pp.pageSize.toString
- )
- }
-
- /** Utility method to parse responses from records-acquisition-server.
- *
- * Non-2xx HTTP error codes will be cause the returned future to fail with a corresponding
- * `DomainException`.
- * @tparam ApiReply The type of the serialized reply object, contained in the HTTP entity
- * @param response The HTTP response to parse.
- * @param unmarshaller An unmarshaller that converts a successful response to an api reply.
- */
- def apiResponse[ApiReply](response: HttpResponse)(
- implicit unmarshaller: Unmarshaller[ResponseEntity, ApiReply]): Future[ApiReply] = {
-
- def extractErrorMessage(response: HttpResponse): Future[String] = {
- import xyz.driver.pdsuicommon.serialization.PlayJsonSupport._
- Unmarshal(response.entity)
- .to[ErrorsResponse]
- .transform(
- response => response.errors.map(_.message).mkString(", "),
- ex => new DomainException("Response has invalid format", ex)
- )
- }
-
- if (response.status.isSuccess) {
- Unmarshal(response.entity).to[ApiReply]
- } else {
- extractErrorMessage(response).flatMap { message =>
- Future.failed(response.status match {
- case StatusCodes.Unauthorized => new AuthenticationException(message)
- case StatusCodes.Forbidden => new AuthorizationException(message)
- case StatusCodes.NotFound => new NotFoundException(message)
- case other =>
- new DomainException(s"Unhandled domain error for HTTP status ${other.value}. ${message}")
- })
- }
- }
- }
-
- implicit def toServiceRequestContext(requestContext: AnonymousRequestContext): ServiceRequestContext = {
- val auth: Map[String, String] = requestContext match {
- case ctx: AuthenticatedRequestContext =>
- Map(
- ContextHeaders.AuthenticationTokenHeader -> ctx.authToken,
- ContextHeaders.TrackingIdHeader -> ctx.requestId.value
- )
- case _ =>
- Map()
- }
- new ServiceRequestContext(contextHeaders = auth, trackingId = requestContext.requestId.value)
- }
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestHypothesisService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestHypothesisService.scala
deleted file mode 100644
index 1b8c943..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestHypothesisService.scala
+++ /dev/null
@@ -1,33 +0,0 @@
-package xyz.driver.pdsuidomain.services.rest
-
-import scala.concurrent.{ExecutionContext, Future}
-
-import akka.http.scaladsl.model._
-import akka.stream.Materializer
-import xyz.driver.core.rest._
-import xyz.driver.pdsuicommon.auth._
-import xyz.driver.pdsuicommon.db._
-import xyz.driver.pdsuidomain.formats.json.ListResponse
-import xyz.driver.pdsuidomain.formats.json.hypothesis.ApiHypothesis
-import xyz.driver.pdsuidomain.services.HypothesisService
-
-class RestHypothesisService(transport: ServiceTransport, baseUri: Uri)(
- implicit protected val materializer: Materializer,
- protected val exec: ExecutionContext)
- extends HypothesisService with RestHelper {
-
- import xyz.driver.pdsuicommon.serialization.PlayJsonSupport._
- import xyz.driver.pdsuidomain.services.HypothesisService._
-
- def getAll(sorting: Option[Sorting] = None)(
- implicit requestContext: AuthenticatedRequestContext): Future[GetListReply] = {
- val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, "/v1/hypothesis", sortingQuery(sorting)))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ListResponse[ApiHypothesis]](response)
- } yield {
- GetListReply.EntityList(reply.items.map(_.toDomain), reply.meta.itemsCount)
- }
- }
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestInterventionService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestInterventionService.scala
deleted file mode 100644
index e593c3b..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestInterventionService.scala
+++ /dev/null
@@ -1,64 +0,0 @@
-package xyz.driver.pdsuidomain.services.rest
-
-import scala.concurrent.{ExecutionContext, Future}
-
-import akka.http.scaladsl.marshalling.Marshal
-import akka.http.scaladsl.model._
-import akka.stream.Materializer
-import xyz.driver.core.rest.{Pagination => _, _}
-import xyz.driver.pdsuicommon.auth._
-import xyz.driver.pdsuicommon.db._
-import xyz.driver.pdsuicommon.domain._
-import xyz.driver.pdsuidomain.entities._
-import xyz.driver.pdsuidomain.formats.json.ListResponse
-import xyz.driver.pdsuidomain.formats.json.intervention.ApiIntervention
-import xyz.driver.pdsuidomain.services.InterventionService
-
-class RestInterventionService(transport: ServiceTransport, baseUri: Uri)(
- implicit protected val materializer: Materializer,
- protected val exec: ExecutionContext)
- extends InterventionService with RestHelper {
-
- import xyz.driver.pdsuicommon.serialization.PlayJsonSupport._
- import xyz.driver.pdsuidomain.services.InterventionService._
-
- def getAll(filter: SearchFilterExpr = SearchFilterExpr.Empty,
- sorting: Option[Sorting] = None,
- pagination: Option[Pagination] = None)(
- implicit requestContext: AuthenticatedRequestContext): Future[GetListReply] = {
- val request = HttpRequest(HttpMethods.GET,
- endpointUri(baseUri,
- "/v1/intervention",
- filterQuery(filter) ++ sortingQuery(sorting) ++ paginationQuery(pagination)))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ListResponse[ApiIntervention]](response)
- } yield {
- GetListReply.EntityList(reply.items.map(_.toDomain), reply.meta.itemsCount)
- }
- }
-
- def getById(id: LongId[Intervention])(implicit requestContext: AuthenticatedRequestContext): Future[GetByIdReply] = {
- val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/intervention/$id"))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ApiIntervention](response)
- } yield {
- GetByIdReply.Entity(reply.toDomain)
- }
- }
-
- def update(origIntervention: InterventionWithArms, draftIntervention: InterventionWithArms)(
- implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] = {
- val id = origIntervention.intervention.id
- for {
- entity <- Marshal(ApiIntervention.fromDomain(draftIntervention)).to[RequestEntity]
- request = HttpRequest(HttpMethods.PATCH, endpointUri(baseUri, s"/v1/intervention/$id")).withEntity(entity)
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ApiIntervention](response)
- } yield {
- UpdateReply.Updated(reply.toDomain)
- }
- }
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestInterventionTypeService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestInterventionTypeService.scala
deleted file mode 100644
index 87f32ec..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestInterventionTypeService.scala
+++ /dev/null
@@ -1,36 +0,0 @@
-package xyz.driver.pdsuidomain.services.rest
-
-import scala.concurrent.{ExecutionContext, Future}
-
-import akka.http.scaladsl.model._
-import akka.stream.Materializer
-import xyz.driver.core.rest._
-import xyz.driver.pdsuicommon.auth._
-import xyz.driver.pdsuicommon.db._
-import xyz.driver.pdsuidomain.formats.json.intervention.ApiInterventionType
-import xyz.driver.pdsuidomain.services.InterventionTypeService
-
-class RestInterventionTypeService(transport: ServiceTransport, baseUri: Uri)(
- implicit protected val materializer: Materializer,
- protected val exec: ExecutionContext)
- extends InterventionTypeService with RestHelper {
-
- import xyz.driver.pdsuicommon.serialization.PlayJsonSupport._
- import xyz.driver.pdsuidomain.formats.json.ListResponse
- import xyz.driver.pdsuidomain.services.InterventionTypeService._
-
- def getAll(sorting: Option[Sorting] = None)(
- implicit requestContext: AuthenticatedRequestContext): Future[GetListReply] = {
- val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, "/v1/intervention-type", sortingQuery(sorting)))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ListResponse[ApiInterventionType]](response)
- } yield {
- {
- val domain = reply.items.map(_.toDomain)
- GetListReply.EntityList(domain.toList, reply.meta.itemsCount)
- }
- }
- }
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestMedicalRecordService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestMedicalRecordService.scala
deleted file mode 100644
index f2b0f2d..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestMedicalRecordService.scala
+++ /dev/null
@@ -1,119 +0,0 @@
-package xyz.driver.pdsuidomain.services.rest
-
-import akka.NotUsed
-import akka.stream.scaladsl.Source
-import akka.util.ByteString
-import scala.concurrent.{ExecutionContext, Future}
-
-import akka.http.scaladsl.marshalling.Marshal
-import akka.http.scaladsl.model._
-import akka.stream.Materializer
-import xyz.driver.core.rest.{Pagination => _, _}
-import xyz.driver.pdsuicommon.auth._
-import xyz.driver.pdsuicommon.db._
-import xyz.driver.pdsuicommon.domain._
-import xyz.driver.pdsuidomain.entities._
-import xyz.driver.pdsuidomain.formats.json.ListResponse
-import xyz.driver.pdsuidomain.formats.json.record.ApiRecord
-import xyz.driver.pdsuidomain.services.MedicalRecordService
-
-class RestMedicalRecordService(transport: ServiceTransport, baseUri: Uri)(
- implicit protected val materializer: Materializer,
- protected val exec: ExecutionContext)
- extends MedicalRecordService with RestHelper {
-
- import xyz.driver.pdsuicommon.serialization.PlayJsonSupport._
- import xyz.driver.pdsuidomain.services.MedicalRecordService._
-
- def getById(recordId: LongId[MedicalRecord])(
- implicit requestContext: AuthenticatedRequestContext): Future[GetByIdReply] = {
- val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/record/$recordId"))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ApiRecord](response)
- } yield {
- GetByIdReply.Entity(reply.toDomain)
- }
- }
-
- def getPdfSource(recordId: LongId[MedicalRecord])(
- implicit requestContext: AuthenticatedRequestContext): Future[Source[ByteString, NotUsed]] = {
-
- val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/record/${recordId}/source"))
-
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[HttpEntity](response)
- } yield {
- reply.dataBytes.mapMaterializedValue(_ => NotUsed)
- }
- }
-
- def getAll(filter: SearchFilterExpr = SearchFilterExpr.Empty,
- sorting: Option[Sorting] = None,
- pagination: Option[Pagination] = None)(
- implicit requestContext: AuthenticatedRequestContext): Future[GetListReply] = {
-
- val request = HttpRequest(
- HttpMethods.GET,
- endpointUri(baseUri, "/v1/record", filterQuery(filter) ++ sortingQuery(sorting) ++ paginationQuery(pagination)))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ListResponse[ApiRecord]](response)
- } yield {
- GetListReply.EntityList(reply.items.map(_.toDomain), reply.meta.itemsCount, reply.meta.lastUpdate)
- }
- }
-
- def create(draftRecord: MedicalRecord)(implicit requestContext: AnonymousRequestContext): Future[CreateReply] = {
- for {
- entity <- Marshal(ApiRecord.fromDomain(draftRecord)).to[RequestEntity]
- request = HttpRequest(HttpMethods.POST, endpointUri(baseUri, "/v1/record")).withEntity(entity)
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ApiRecord](response)
- } yield {
- CreateReply.Created(reply.toDomain)
- }
- }
-
- def update(origRecord: MedicalRecord, draftRecord: MedicalRecord)(
- implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] = {
- val id = origRecord.id.toString
- for {
- entity <- Marshal(ApiRecord.fromDomain(draftRecord)).to[RequestEntity]
- request = HttpRequest(HttpMethods.PATCH, endpointUri(baseUri, s"/v1/record/$id")).withEntity(entity)
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ApiRecord](response)
- } yield {
- UpdateReply.Updated(reply.toDomain)
- }
- }
-
- private def editAction(orig: MedicalRecord, action: String)(
- implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] = {
- val id = orig.id.toString
- val request = HttpRequest(HttpMethods.POST, endpointUri(baseUri, s"/v1/record/$id/$action"))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ApiRecord](response)
- } yield {
- UpdateReply.Updated(reply.toDomain)
- }
- }
-
- def start(orig: MedicalRecord)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] =
- editAction(orig, "start")
- def submit(orig: MedicalRecord)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] =
- editAction(orig, "submit")
- def restart(orig: MedicalRecord)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] =
- editAction(orig, "restart")
- def flag(orig: MedicalRecord)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] =
- editAction(orig, "flag")
- def resolve(orig: MedicalRecord)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] =
- editAction(orig, "resolve")
- def unassign(orig: MedicalRecord)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] =
- editAction(orig, "unassign")
- def archive(orig: MedicalRecord)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] =
- editAction(orig, "archive")
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestMessageService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestMessageService.scala
deleted file mode 100644
index e133825..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestMessageService.scala
+++ /dev/null
@@ -1,87 +0,0 @@
-package xyz.driver.pdsuidomain.services.rest
-
-import scala.concurrent.{ExecutionContext, Future}
-
-import akka.http.scaladsl.marshalling.Marshal
-import akka.http.scaladsl.model._
-import akka.stream.Materializer
-import xyz.driver.core.rest.{Pagination => _, _}
-import xyz.driver.pdsuicommon.auth._
-import xyz.driver.pdsuicommon.db._
-import xyz.driver.pdsuicommon.domain._
-import xyz.driver.pdsuidomain.entities._
-import xyz.driver.pdsuidomain.formats.json.ListResponse
-import xyz.driver.pdsuidomain.formats.json.message.ApiMessage
-import xyz.driver.pdsuidomain.services.MessageService
-
-class RestMessageService(transport: ServiceTransport, baseUri: Uri)(implicit protected val materializer: Materializer,
- protected val exec: ExecutionContext)
- extends MessageService with RestHelper {
-
- import xyz.driver.pdsuicommon.serialization.PlayJsonSupport._
- import xyz.driver.pdsuidomain.services.MessageService._
-
- def create(draftMessage: Message)(implicit requestContext: AuthenticatedRequestContext): Future[CreateReply] = {
- for {
- entity <- Marshal(ApiMessage.fromDomain(draftMessage)).to[RequestEntity]
- request = HttpRequest(HttpMethods.POST, endpointUri(baseUri, "/v1/message")).withEntity(entity)
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ApiMessage](response)
- } yield {
- CreateReply.Created(reply.toDomain)
- }
- }
-
- def getById(messageId: LongId[Message])(implicit requestContext: AuthenticatedRequestContext): Future[GetByIdReply] = {
- import xyz.driver.pdsuicommon.db.SearchFilterBinaryOperation._
- import xyz.driver.pdsuicommon.db.SearchFilterExpr._
- val filter = Atom.Binary("id", Eq, messageId)
- getAll(filter).map({
- case GetListReply.EntityList(messages, _, _) if messages.isEmpty =>
- GetByIdReply.NotFoundError
- case GetListReply.EntityList(messages, _, _) =>
- GetByIdReply.Entity(messages.head)
- case GetListReply.AuthorizationError =>
- GetByIdReply.AuthorizationError
- })
- }
-
- def getAll(filter: SearchFilterExpr = SearchFilterExpr.Empty,
- sorting: Option[Sorting] = None,
- pagination: Option[Pagination] = None)(
- implicit requestContext: AuthenticatedRequestContext): Future[GetListReply] = {
- val request = HttpRequest(
- HttpMethods.GET,
- endpointUri(baseUri, "/v1/message", filterQuery(filter) ++ sortingQuery(sorting) ++ paginationQuery(pagination)))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ListResponse[ApiMessage]](response)
- } yield {
- GetListReply.EntityList(reply.items.map(_.toDomain), reply.meta.itemsCount, reply.meta.lastUpdate)
- }
- }
-
- def update(origMessage: Message, draftMessage: Message)(
- implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] = {
- for {
- entity <- Marshal(ApiMessage.fromDomain(draftMessage)).to[RequestEntity]
- id = origMessage.id.id
- request = HttpRequest(HttpMethods.PATCH, endpointUri(baseUri, s"/v1/message/$id")).withEntity(entity)
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ApiMessage](response)
- } yield {
- UpdateReply.Updated(reply.toDomain)
- }
- }
-
- def delete(messageId: LongId[Message])(implicit requestContext: AuthenticatedRequestContext): Future[DeleteReply] = {
- val request = HttpRequest(HttpMethods.DELETE, endpointUri(baseUri, s"/v1/message/${messageId.id}"))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- _ <- apiResponse[HttpEntity](response)
- } yield {
- DeleteReply.Deleted
- }
- }
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestPatientService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestPatientService.scala
deleted file mode 100644
index b9cbec8..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestPatientService.scala
+++ /dev/null
@@ -1,72 +0,0 @@
-package xyz.driver.pdsuidomain.services.rest
-
-import scala.concurrent.{ExecutionContext, Future}
-
-import akka.http.scaladsl.model._
-import akka.stream.Materializer
-import xyz.driver.core.rest.{Pagination => _, _}
-import xyz.driver.pdsuicommon.auth._
-import xyz.driver.pdsuicommon.db._
-import xyz.driver.pdsuicommon.domain._
-import xyz.driver.pdsuidomain.entities._
-import xyz.driver.pdsuidomain.formats.json.ListResponse
-import xyz.driver.pdsuidomain.formats.json.patient.ApiPatient
-import xyz.driver.pdsuidomain.services.PatientService
-
-class RestPatientService(transport: ServiceTransport, baseUri: Uri)(implicit protected val materializer: Materializer,
- protected val exec: ExecutionContext)
- extends PatientService with RestHelper {
-
- import xyz.driver.pdsuicommon.serialization.PlayJsonSupport._
- import xyz.driver.pdsuidomain.services.PatientService._
-
- def getById(id: UuidId[Patient])(implicit requestContext: AuthenticatedRequestContext): Future[GetByIdReply] = {
- val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/patient/$id"))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ApiPatient](response)
- } yield {
- GetByIdReply.Entity(reply.toDomain)
- }
- }
-
- def getAll(filter: SearchFilterExpr = SearchFilterExpr.Empty,
- sorting: Option[Sorting] = None,
- pagination: Option[Pagination] = None)(
- implicit requestContext: AuthenticatedRequestContext): Future[GetListReply] = {
- val request = HttpRequest(
- HttpMethods.GET,
- endpointUri(baseUri, "/v1/patient", filterQuery(filter) ++ sortingQuery(sorting) ++ paginationQuery(pagination)))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ListResponse[ApiPatient]](response)
- } yield {
- GetListReply.EntityList(reply.items.map(_.toDomain), reply.meta.itemsCount, reply.meta.lastUpdate)
- }
- }
-
- private def editAction(orig: Patient, action: String)(
- implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] = {
- val id = orig.id.toString
- val request = HttpRequest(HttpMethods.POST, endpointUri(baseUri, s"/v1/patient/$id/$action"))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ApiPatient](response)
- } yield {
- UpdateReply.Updated(reply.toDomain)
- }
- }
-
- def unassign(origPatient: Patient)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] =
- editAction(origPatient, "unassign")
- def start(origPatient: Patient)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] =
- editAction(origPatient, "start")
- def submit(origPatient: Patient)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] =
- editAction(origPatient, "submit")
- def restart(origPatient: Patient)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] =
- editAction(origPatient, "restart")
- def flag(origPatient: Patient)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] =
- editAction(origPatient, "flag")
- def resolve(origPatient: Patient)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] =
- editAction(origPatient, "resolve")
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestProviderTypeService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestProviderTypeService.scala
deleted file mode 100644
index f82ec40..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestProviderTypeService.scala
+++ /dev/null
@@ -1,33 +0,0 @@
-package xyz.driver.pdsuidomain.services.rest
-
-import scala.concurrent.{ExecutionContext, Future}
-
-import akka.http.scaladsl.model._
-import akka.stream.Materializer
-import xyz.driver.core.rest.{Pagination => _, _}
-import xyz.driver.pdsuicommon.auth._
-import xyz.driver.pdsuicommon.db._
-import xyz.driver.pdsuidomain.formats.json.ListResponse
-import xyz.driver.pdsuidomain.services.ProviderTypeService
-import xyz.driver.pdsuidomain.formats.json.document.ApiProviderType
-
-class RestProviderTypeService(transport: ServiceTransport, baseUri: Uri)(
- implicit protected val materializer: Materializer,
- protected val exec: ExecutionContext)
- extends ProviderTypeService with RestHelper {
-
- import xyz.driver.pdsuicommon.serialization.PlayJsonSupport._
- import xyz.driver.pdsuidomain.services.ProviderTypeService._
-
- def getAll(sorting: Option[Sorting] = None)(
- implicit requestContext: AuthenticatedRequestContext): Future[GetListReply] = {
- val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, "/v1/provider-type", sortingQuery(sorting)))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ListResponse[ApiProviderType]](response)
- } yield {
- GetListReply.EntityList(reply.items.map(_.toDomain), reply.meta.itemsCount)
- }
- }
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestStudyDesignService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestStudyDesignService.scala
deleted file mode 100644
index 98b397d..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestStudyDesignService.scala
+++ /dev/null
@@ -1,33 +0,0 @@
-package xyz.driver.pdsuidomain.services.rest
-
-import scala.concurrent.{ExecutionContext, Future}
-
-import akka.http.scaladsl.model._
-import akka.stream.Materializer
-import xyz.driver.core.rest._
-import xyz.driver.pdsuicommon.auth._
-import xyz.driver.pdsuicommon.db._
-import xyz.driver.pdsuidomain.formats.json.ListResponse
-import xyz.driver.pdsuidomain.formats.json.studydesign.ApiStudyDesign
-import xyz.driver.pdsuidomain.services.StudyDesignService
-
-class RestStudyDesignService(transport: ServiceTransport, baseUri: Uri)(
- implicit protected val materializer: Materializer,
- protected val exec: ExecutionContext)
- extends StudyDesignService with RestHelper {
-
- import xyz.driver.pdsuicommon.serialization.PlayJsonSupport._
- import xyz.driver.pdsuidomain.services.StudyDesignService._
-
- def getAll(sorting: Option[Sorting] = None)(
- implicit requestContext: AuthenticatedRequestContext): Future[GetListReply] = {
- val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, "/v1/study-design", sortingQuery(sorting)))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ListResponse[ApiStudyDesign]](response)
- } yield {
- GetListReply.EntityList(reply.items.map(_.toDomain), reply.meta.itemsCount)
- }
- }
-
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestTrialService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestTrialService.scala
deleted file mode 100644
index f826b98..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestTrialService.scala
+++ /dev/null
@@ -1,113 +0,0 @@
-package xyz.driver.pdsuidomain.services.rest
-
-import scala.concurrent.{ExecutionContext, Future}
-import akka.NotUsed
-import akka.stream.scaladsl.Source
-import akka.util.ByteString
-import akka.http.scaladsl.marshalling.Marshal
-import akka.http.scaladsl.model._
-import akka.stream.Materializer
-import xyz.driver.core.rest.{Pagination => _, _}
-import xyz.driver.pdsuicommon.auth._
-import xyz.driver.pdsuicommon.db._
-import xyz.driver.pdsuicommon.domain._
-import xyz.driver.pdsuidomain.entities._
-import xyz.driver.pdsuidomain.formats.json.ListResponse
-import xyz.driver.pdsuidomain.formats.json.export.ApiExportTrialWithLabels
-import xyz.driver.pdsuidomain.formats.json.trial.ApiTrial
-import xyz.driver.pdsuidomain.services.TrialService
-
-class RestTrialService(transport: ServiceTransport, baseUri: Uri)(implicit protected val materializer: Materializer,
- protected val exec: ExecutionContext)
- extends TrialService with RestHelper {
-
- import xyz.driver.pdsuicommon.serialization.PlayJsonSupport._
- import xyz.driver.pdsuidomain.services.TrialService._
-
- def getById(id: StringId[Trial])(implicit requestContext: AuthenticatedRequestContext): Future[GetByIdReply] = {
- val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/trial/$id"))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ApiTrial](response)
- } yield {
- GetByIdReply.Entity(reply.toDomain)
- }
- }
-
- def getTrialWithLabels(trialId: StringId[Trial], condition: String)(
- implicit requestContext: AuthenticatedRequestContext): Future[GetTrialWithLabelsReply] = {
- val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/export/trial/$trialId"))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ApiExportTrialWithLabels](response)
- } yield {
- GetTrialWithLabelsReply.Entity(reply.toDomain)
- }
- }
-
- def getPdfSource(trialId: StringId[Trial])(
- implicit requestContext: AuthenticatedRequestContext): Future[Source[ByteString, NotUsed]] = {
- val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/trial/${trialId}/source"))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[HttpEntity](response)
- } yield {
- reply.dataBytes.mapMaterializedValue(_ => NotUsed)
- }
- }
-
- def getAll(filter: SearchFilterExpr = SearchFilterExpr.Empty,
- sorting: Option[Sorting] = None,
- pagination: Option[Pagination] = None)(
- implicit requestContext: AuthenticatedRequestContext): Future[GetListReply] = {
- val request = HttpRequest(
- HttpMethods.GET,
- endpointUri(baseUri, "/v1/trial", filterQuery(filter) ++ sortingQuery(sorting) ++ paginationQuery(pagination)))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ListResponse[ApiTrial]](response)
- } yield {
- GetListReply.EntityList(reply.items.map(_.toDomain), reply.meta.itemsCount, reply.meta.lastUpdate)
- }
- }
-
- def update(origTrial: Trial, draftTrial: Trial)(
- implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] = {
- val id = origTrial.id.id
- for {
- entity <- Marshal(ApiTrial.fromDomain(draftTrial)).to[RequestEntity]
- request = HttpRequest(HttpMethods.PATCH, endpointUri(baseUri, s"/v1/trial/$id")).withEntity(entity)
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ApiTrial](response)
- } yield {
- UpdateReply.Updated(reply.toDomain)
- }
- }
-
- private def singleAction(origTrial: Trial, action: String)(
- implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] = {
- val id = origTrial.id.id
- val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/trial/$id/$action"))
- for {
- response <- transport.sendRequestGetResponse(requestContext)(request)
- reply <- apiResponse[ApiTrial](response)
- } yield {
- UpdateReply.Updated(reply.toDomain)
- }
- }
-
- def start(origTrial: Trial)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] =
- singleAction(origTrial, "start")
- def submit(origTrial: Trial)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] =
- singleAction(origTrial, "submit")
- def restart(origTrial: Trial)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] =
- singleAction(origTrial, "restart")
- def flag(origTrial: Trial)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] =
- singleAction(origTrial, "flag")
- def resolve(origTrial: Trial)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] =
- singleAction(origTrial, "resolve")
- def archive(origTrial: Trial)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] =
- singleAction(origTrial, "archive")
- def unassign(origTrial: Trial)(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] =
- singleAction(origTrial, "unassign")
-}