/// <inheritdoc/> public async Task <(ReportDTO report, bool success)> ProcessData(IRecordDTO recordDTO) { if (recordDTO == null) { return(null, false); } ReportDTO healthReport; try { healthReport = await GetHealthReport(recordDTO); await _registerReportCommandProducer.Send(healthReport); } catch { return(null, false); } return(healthReport, true); }
// Randomly generate health status of the patient. private Task <ReportDTO> GetHealthReport(IRecordDTO recordDTO) { var generator = new Random(); var arrayOfHealthStatuses = Enum.GetValues(typeof(HealthStatus)); var healthStatus = (HealthStatus)arrayOfHealthStatuses.GetValue(generator.Next(0, arrayOfHealthStatuses.Length)); var accuracy = generator.Next(50, 101); string diseases = null; if (healthStatus == HealthStatus.Diseased) { switch (recordDTO.SensorDeviceType) { case "Temperature": diseases = RecognizeDiseasesByTemperature(); break; case "Acoustic": diseases = RecognizeDiseasesByAcoustic(); break; default: break; } } var healthReport = _mapper.Map <IRecordDTO, ReportDTO>(recordDTO); healthReport.HealthStatus = healthStatus.ToString(); healthReport.HealthDescription = DataProcessorDictionary.GetHealthDescription(healthStatus); healthReport.Diseases = diseases; healthReport.Accuracy = accuracy; // Imitation of processing time (10 sec). Thread.Sleep(10000); return(Task.FromResult(healthReport)); }