aboutsummaryrefslogblamecommitdiff
path: root/src/main/scala/xyz/driver/pdsuicommon/utils/CustomSwaggerJsonFormats.scala
blob: 55311ac225e28ffea21593b8c22148ec8b639e23 (plain) (tree)
1
2
3
4
5
6
7
8
9





                                            
                                                               
                                        
                                                                      
                                                           
                                             
                                                          

                                                                             
                                                   
                                                                    


                                                                           
                                                                     
                                                                             



                                                                                                            

                                 


                                 
                                                                 



                                                                                                     

                                               
   




                                                                                                       

   




                                                                    

                                                                            























                                                                                             


                                                                                                                      


     
                           
                                                                   






                                                                             









                                                                             
 








                                                                                                             




















                                                                                     

























                                                                                                                     
                                    

   
 
package xyz.driver.pdsuicommon.utils

import java.time.{LocalDate, LocalDateTime}

import io.swagger.models.properties.Property
import spray.json.JsValue
import xyz.driver.pdsuicommon.domain.{LongId, StringId, UuidId}
import xyz.driver.pdsuidomain.entities._
import xyz.driver.pdsuidomain.formats.json.sprayformats.ListResponse._
import xyz.driver.core.swagger.CustomSwaggerJsonConverter._
import xyz.driver.entities.patient.CancerType
import xyz.driver.pdsuicommon.concurrent.BridgeUploadQueue
import xyz.driver.pdsuidomain.entities.export.patient.ExportPatientWithLabels
import xyz.driver.pdsuidomain.entities.export.trial.ExportTrialWithLabels
import xyz.driver.pdsuidomain.fakes.entities.common
import xyz.driver.pdsuidomain.formats.json.sprayformats.ListResponse
import xyz.driver.pdsuidomain.formats.json.sprayformats.bridgeuploadqueue._
import xyz.driver.pdsuidomain.formats.json.sprayformats.record._
import xyz.driver.pdsuidomain.formats.json.sprayformats.document._
import xyz.driver.pdsuidomain.services.CriterionService.RichCriterion
import xyz.driver.pdsuidomain.services.ExtractedDataService.RichExtractedData
import xyz.driver.pdsuidomain.services.PatientCriterionService.{DraftPatientCriterion, RichPatientCriterion}
import xyz.driver.pdsuidomain.services.PatientEligibleTrialService.RichPatientEligibleTrial
import xyz.driver.pdsuidomain.services.PatientHypothesisService.RichPatientHypothesis
import xyz.driver.pdsuidomain.services.PatientLabelService.RichPatientLabel

import scala.collection.immutable

object CustomSwaggerJsonFormats {

  val customCommonProperties = immutable.Map[Class[_], Property](
    classOf[LocalDateTime] -> stringProperty(example = Some("2010-12-31'T'18:59:59Z")),
    classOf[LocalDate]     -> stringProperty(example = Some("2010-12-31")),
    classOf[UuidId[_]]     -> stringProperty(example = Some("370b0450-35cb-4aab-ba74-0145be75add5")),
    classOf[StringId[_]]   -> stringProperty(),
    classOf[LongId[_]]     -> stringProperty(),
    classOf[CancerType]    -> stringProperty()
  )

  val customCommonObjectsExamples = immutable.Map[Class[_], JsValue](
    classOf[BridgeUploadQueue.Item] -> queueUploadItemFormat.write(common.nextBridgeUploadQueueItem()),
    classOf[ProviderType]           -> providerTypeFormat.write(common.nextProviderType()),
    classOf[DocumentType]           -> documentTypeFormat.write(common.nextDocumentType())
  )

  object trialcuration {
    import xyz.driver.pdsuidomain.fakes.entities.trialcuration._
    import xyz.driver.pdsuidomain.fakes.entities.export
    import xyz.driver.pdsuidomain.formats.json.sprayformats.export._
    import xyz.driver.pdsuidomain.formats.json.sprayformats.arm._
    import xyz.driver.pdsuidomain.formats.json.sprayformats.slotarm._
    import xyz.driver.pdsuidomain.formats.json.sprayformats.eligibilityarm._
    import xyz.driver.pdsuidomain.formats.json.sprayformats.criterion._
    import xyz.driver.pdsuidomain.formats.json.sprayformats.intervention._
    import xyz.driver.pdsuidomain.formats.json.sprayformats.hypothesis._
    import xyz.driver.pdsuidomain.formats.json.sprayformats.studydesign._
    import xyz.driver.pdsuidomain.formats.json.sprayformats.trial._
    import xyz.driver.pdsuidomain.formats.json.sprayformats.trialhistory._
    import xyz.driver.pdsuidomain.formats.json.sprayformats.trialissue._

    val customTrialCurationProperties = immutable.Map[Class[_], Property](
      classOf[Trial.Status]        -> stringProperty(),
      classOf[TrialHistory.Action] -> stringProperty(),
      classOf[TrialHistory.State]  -> stringProperty()
    ) ++ customCommonProperties

    val customTrialCurationObjectsExamples = immutable.Map[Class[_], JsValue](
      classOf[Trial]                 -> trialWriter.write(nextTrial()),
      classOf[Arm]                   -> armFormat.write(nextArm()),
      classOf[TrialHistory]          -> trialHistoryFormat.write(nextTrialHistory()),
      classOf[TrialIssue]            -> trialIssueWriter.write(nextTrialIssue()),
      classOf[RichCriterion]         -> richCriterionFormat.write(nextRichCriterion()),
      classOf[InterventionWithArms]  -> interventionFormat.write(nextInterventionWithArms()),
      classOf[InterventionType]      -> interventionTypeFormat.write(nextInterventionType()),
      classOf[Hypothesis]            -> hypothesisFormat.write(nextHypothesis()),
      classOf[StudyDesign]           -> studyDesignFormat.write(nextStudyDesign()),
      classOf[ExportTrialWithLabels] -> trialWithLabelsFormat.write(export.nextExportTrialWithLabels()),
      classOf[EligibilityArmWithDiseases] -> eligibilityArmWithDiseasesWriter.write(nextEligibilityArmWithDiseases()),
      classOf[SlotArm]                    -> slotArmFormat.write(nextSlotArm())
    )
  }

  object recordprocessing {
    import xyz.driver.pdsuidomain.fakes.entities.recordprocessing._
    import xyz.driver.pdsuidomain.fakes.entities.export
    import xyz.driver.pdsuidomain.formats.json.sprayformats.export._
    import xyz.driver.pdsuidomain.formats.json.sprayformats.documentissue._
    import xyz.driver.pdsuidomain.formats.json.sprayformats.documenthistory._
    import xyz.driver.pdsuidomain.formats.json.sprayformats.recordissue._
    import xyz.driver.pdsuidomain.formats.json.sprayformats.recordhistory._
    import xyz.driver.pdsuidomain.formats.json.sprayformats.extracteddata._

    val customRecordProcessingProperties = immutable.Map[Class[_], Property](
      classOf[MedicalRecord.Status]        -> stringProperty(),
      classOf[MedicalRecordHistory.Action] -> stringProperty(),
      classOf[MedicalRecordHistory.State]  -> stringProperty(),
      classOf[Document.Status]             -> stringProperty(),
      classOf[Document.RequiredType]       -> stringProperty(),
      classOf[DocumentHistory.Action]      -> stringProperty(),
      classOf[DocumentHistory.State]       -> stringProperty()
    ) ++ customCommonProperties

    val customRecordProcessingObjectsExamples = immutable.Map[Class[_], JsValue](
      classOf[Document]                -> documentFormat.write(nextDocument()),
      classOf[DocumentIssue]           -> documentIssueFormat.write(nextDocumentIssue()),
      classOf[DocumentHistory]         -> documentHistoryFormat.write(nextDocumentHistory()),
      classOf[MedicalRecord]           -> recordFormat.write(nextMedicalRecord()),
      classOf[MedicalRecordIssue]      -> recordIssueFormat.write(nextMedicalRecordIssue()),
      classOf[MedicalRecordHistory]    -> recordHistoryFormat.write(nextMedicalRecordHistory()),
      classOf[RichExtractedData]       -> extractedDataFormat.write(nextRichExtractedData()),
      classOf[ExportPatientWithLabels] -> patientWithLabelsFormat.write(export.nextExportPatientWithLabels())
    ) ++ customCommonObjectsExamples
  }

  object treatmentmatching {
    import xyz.driver.pdsuidomain.fakes.entities.treatmentmatching._
    import xyz.driver.pdsuidomain.formats.json.sprayformats.patient._
    import xyz.driver.pdsuidomain.formats.json.sprayformats.patientcriterion._
    import xyz.driver.pdsuidomain.formats.json.sprayformats.patientdefiningcriteria._
    import xyz.driver.pdsuidomain.formats.json.sprayformats.patienteligibletrial._
    import xyz.driver.pdsuidomain.formats.json.sprayformats.patientlabel._
    import xyz.driver.pdsuidomain.formats.json.sprayformats.patienthypothesis._
    import xyz.driver.pdsuidomain.formats.json.sprayformats.patienthistory._
    import xyz.driver.pdsuidomain.formats.json.sprayformats.patientissue._

    val customTreatmentMatchingProperties = immutable.Map[Class[_], Property](
      classOf[Patient.Status]        -> stringProperty(),
      classOf[PatientHistory.Action] -> stringProperty(),
      classOf[PatientHistory.State]  -> stringProperty()
    ) ++ customCommonProperties

    val customTreatmentMatchingObjectsExamples = immutable.Map[Class[_], JsValue](
      classOf[Patient]                    -> patientWriter.write(nextPatient()),
      classOf[RichPatientLabel]           -> richPatientLabelWriter.write(nextRichPatientLabel()),
      classOf[PatientLabel]               -> patientLabelDefiningCriteriaWriter.write(nextPatientLabel()),
      classOf[RichPatientCriterion]       -> patientCriterionWriter.write(nextRichPatientCriterion()),
      classOf[DraftPatientCriterion]      -> draftPatientCriterionFormat.write(nextDraftPatientCriterion()),
      classOf[PatientLabelEvidenceView]   -> patientLabelEvidenceWriter.write(nextPatientLabelEvidenceView()),
      classOf[RichPatientEligibleTrial]   -> patientEligibleTrialWriter.write(nextRichPatientEligibleTrial()),
      classOf[PatientHypothesis]          -> patientHypothesisWriter.write(nextPatientHypothesis()),
      classOf[RichPatientHypothesis]      -> richPatientHypothesisWriter.write(nextRichPatientHypothesis()),
      classOf[PatientHistory]             -> patientHistoryFormat.write(nextPatientHistory()),
      classOf[PatientIssue]               -> patientIssueWriter.write(nextPatientIssue()),
      classOf[ListResponse[Patient]]      -> listResponseWriter[Patient].write(nextPatientListResponse()),
      classOf[ListResponse[PatientLabel]] -> listResponseWriter[PatientLabel].write(nextPatientLabelListResponse()),
      classOf[ListResponse[RichPatientLabel]] -> listResponseWriter[RichPatientLabel].write(
        nextRichPatientLabelListResponse()),
      classOf[ListResponse[RichPatientCriterion]] -> listResponseWriter[RichPatientCriterion].write(
        nextRichPatientCriterionListResponse()),
      classOf[ListResponse[PatientLabelEvidenceView]] -> listResponseWriter[PatientLabelEvidenceView].write(
        nextPatientLabelEvidenceViewListResponse()),
      classOf[ListResponse[RichPatientEligibleTrial]] -> listResponseWriter[RichPatientEligibleTrial].write(
        nextRichPatientEligibleTrialListResponse()),
      classOf[ListResponse[RichPatientHypothesis]] -> listResponseWriter[RichPatientHypothesis].write(
        nextRichPatientHypothesisListResponse()),
      classOf[ListResponse[PatientIssue]] -> listResponseWriter[PatientIssue].write(nextPatientIssuesListResponse()),
      classOf[ListResponse[PatientHistory]] -> listResponseWriter[PatientHistory].write(
        nextPatientHistoryListResponse())
    ) ++ customCommonObjectsExamples
  }

}