package xyz.driver.pdsuidomain.fakes.entities import xyz.driver.pdsuidomain.entities._ import xyz.driver.core.generators import xyz.driver.core.generators._ import common._ import xyz.driver.pdsuicommon.concurrent.BridgeUploadQueue import xyz.driver.pdsuicommon.domain.{TextJson, User} import xyz.driver.pdsuidomain.fakes.entities.rep.{DocumentGen, MedicalRecordMetaGen, Common} object RecordsProcessingApi { private val maxCollectionNumber = 5 private val maxAttemtsNumber = 100 private def nextMedicalRecordMetasJson: TextJson[List[MedicalRecord.Meta]] = TextJson(nextMedicalRecordMetas(nextInt(maxCollectionNumber, minValue = 0))) private def nextDocuments: TextJson[List[Document]] = TextJson(nextDocuments(nextInt(maxCollectionNumber, minValue = 0))) def nextMedicalRecordStatus: MedicalRecord.Status = generators.oneOf[MedicalRecord.Status](MedicalRecord.Status.All) def nextMedicalRecordMeta: MedicalRecord.Meta = MedicalRecordMetaGen.nextMedicalRecordMeta def nextMedicalRecordMetas(count: Int): List[MedicalRecord.Meta] = List.fill(count)(nextMedicalRecordMeta) def nextMedicalRecordHistoryState: MedicalRecordHistory.State = generators.oneOf[MedicalRecordHistory.State](MedicalRecordHistory.State.All) def nextMedicalRecordHistoryAction: MedicalRecordHistory.Action = generators.oneOf[MedicalRecordHistory.Action](MedicalRecordHistory.Action.All) def nextDocument: Document = DocumentGen.nextDocument def nextDocuments(count: Int): List[Document] = List.fill(count)(nextDocument) def nextMedicalRecord() = { MedicalRecord( id = nextLongId[MedicalRecord], status = nextMedicalRecordStatus, previousStatus = nextOption(nextMedicalRecordStatus), assignee = nextOption(nextStringId), previousAssignee = nextOption(nextStringId), lastActiveUserId = nextOption(nextStringId), patientId = nextUuidId, requestId = RecordRequestId(generators.nextUuid()), disease = generators.nextString(), caseId = nextOption(CaseId(generators.nextString())), physician = nextOption(generators.nextString()), meta = nextOption(nextMedicalRecordMetasJson), predictedMeta = nextOption(nextMedicalRecordMetasJson), predictedDocuments = nextOption(nextDocuments), lastUpdate = nextLocalDateTime ) } def nextMedicalRecordHistory() = { MedicalRecordHistory( id = nextLongId[MedicalRecordHistory], executor = nextStringId[User], recordId = nextLongId[MedicalRecord], state = nextMedicalRecordHistoryState, action = nextMedicalRecordHistoryAction, created = nextLocalDateTime ) } def nextMedicalRecordIssue(): MedicalRecordIssue = { val pages = Common.genStartAndEndPages MedicalRecordIssue( id = nextLongId[MedicalRecordIssue], userId = nextStringId[User], recordId = nextLongId[MedicalRecord], startPage = pages._1, endPage = pages._2, lastUpdate = nextLocalDateTime, isDraft = nextBoolean(), text = nextString(), archiveRequired = nextBoolean() ) } def nextBridgeUploadQueueItem(): BridgeUploadQueue.Item = { BridgeUploadQueue.Item( kind = nextString(), tag = nextString(), created = nextLocalDateTime, attempts = nextInt(maxAttemtsNumber, minValue = 0), nextAttempt = nextLocalDateTime, completed = nextBoolean(), dependencyKind = nextOption(nextString()), dependencyTag = nextOption(nextString()) ) } def nextProviderType(): ProviderType = { ProviderType( id = nextLongId[ProviderType], name = nextString() ) } }