//TODO: Add a test that ensure that the right count is put in the right property
        //TODO: This should possibly be process once, since it should only happen the first time a text message is recieved
        public void Process(TextMessageReceived @event)
        {
            //TODO: Handle if parsing fails and send TextMessageParseFailed event
            var caseReportContent = TextMessageContentParser.Parse(@event.Message);
            var dataCollector     = _dataCollectors.GetByPhoneNumber(@event.OriginNumber);

            if (caseReportContent.GetType() == typeof(SingleCaseReportContent))
            {
                var singlecaseReport = caseReportContent as SingleCaseReportContent;
                _eventEmitter.Emit(Feature, new CaseReportReceived
                {
                    Id = Guid.NewGuid(),
                    DataCollectorId       = dataCollector?.Id,
                    HealthRiskId          = _healthRisks.GetByReadableId(caseReportContent.HealthRiskId).Id,
                    NumberOfFemalesUnder5 =
                        singlecaseReport.Age <= 5 && singlecaseReport.Sex == Sex.Female ? 1 : 0,
                    NumberOfFemalesOver5 =
                        singlecaseReport.Age > 5 && singlecaseReport.Sex == Sex.Female ? 1 : 0,
                    NumberOfMalesUnder5 =
                        singlecaseReport.Age <= 5 && singlecaseReport.Sex == Sex.Male ? 1 : 0,
                    NumberOfMalesOver5 =
                        singlecaseReport.Age > 5 && singlecaseReport.Sex == Sex.Male ? 1 : 0,
                    Latitude  = @event.Latitude,
                    Longitude = @event.Longitude,
                    Timestamp = @event.Sent
                });
            }
            else
            {
                var report = caseReportContent as MultipleCaseReportContent;
                _eventEmitter.Emit(Feature, new CaseReportReceived
                {
                    Id = Guid.NewGuid(),
                    DataCollectorId       = dataCollector?.Id,
                    HealthRiskId          = _healthRisks.GetByReadableId(caseReportContent.HealthRiskId).Id,
                    NumberOfFemalesUnder5 = report.FemalesUnder5,
                    NumberOfFemalesOver5  = report.FemalesOver5,
                    NumberOfMalesUnder5   = report.MalesUnder5,
                    NumberOfMalesOver5    = report.MalesOver5,
                    Latitude  = @event.Latitude,
                    Longitude = @event.Longitude,
                    Timestamp = @event.Sent
                });
            }
            //TODO: emit AnonymousCaseReportRecieved
            //Or should both events be emitted?
            //if (dataCollector == null)
            //{

            //    return;
            //}
        }
Example #2
0
        //TODO: Add a test that ensure that the right count is put in the right property
        //TODO: This should possibly be process once, since it should only happen the first time a text message is recieved
        public void Process(TextMessageReceived @event)
        {
            var caseReportContent = TextMessageContentParser.Parse(@event.Message);
            var dataCollector     = _dataCollectors.GetByPhoneNumber(@event.OriginNumber);

            if (caseReportContent.GetType() == typeof(InvalidCaseReportContent))
            {
                //TODO: Handle if datacollector is unknown also. Different event?
                var invalidCaseReport = caseReportContent as InvalidCaseReportContent;
                _eventEmitter.Emit(Feature, new TextMessageParsingFailed
                {
                    Id = Guid.NewGuid(),
                    DataCollectorId     = dataCollector.Id,
                    Message             = @event.Message,
                    ParsingErrorMessage = invalidCaseReport.ErrorMessage
                });
            }
            else if (caseReportContent.GetType() == typeof(SingleCaseReportContent))
            {
                var singlecaseReport = caseReportContent as SingleCaseReportContent;
                var healthRisk       = _healthRisks.GetByReadableId(singlecaseReport.HealthRiskId);
                if (dataCollector == null)
                {
                    _eventEmitter.Emit(Feature, new AnonymousCaseReportRecieved
                    {
                        Id                    = Guid.NewGuid(),
                        PhoneNumber           = @event.OriginNumber,
                        HealthRiskId          = healthRisk.Id,
                        NumberOfFemalesUnder5 =
                            singlecaseReport.Age <= 5 && singlecaseReport.Sex == Sex.Female ? 1 : 0,
                        NumberOfFemalesOver5 =
                            singlecaseReport.Age > 5 && singlecaseReport.Sex == Sex.Female ? 1 : 0,
                        NumberOfMalesUnder5 =
                            singlecaseReport.Age <= 5 && singlecaseReport.Sex == Sex.Male ? 1 : 0,
                        NumberOfMalesOver5 =
                            singlecaseReport.Age > 5 && singlecaseReport.Sex == Sex.Male ? 1 : 0,
                        Latitude  = @event.Latitude,
                        Longitude = @event.Longitude,
                        Timestamp = @event.Sent
                    });
                    return;
                }
                _eventEmitter.Emit(Feature, new CaseReportReceived
                {
                    Id = Guid.NewGuid(),
                    DataCollectorId       = dataCollector.Id,
                    HealthRiskId          = healthRisk.Id,
                    NumberOfFemalesUnder5 =
                        singlecaseReport.Age <= 5 && singlecaseReport.Sex == Sex.Female ? 1 : 0,
                    NumberOfFemalesOver5 =
                        singlecaseReport.Age > 5 && singlecaseReport.Sex == Sex.Female ? 1 : 0,
                    NumberOfMalesUnder5 =
                        singlecaseReport.Age <= 5 && singlecaseReport.Sex == Sex.Male ? 1 : 0,
                    NumberOfMalesOver5 =
                        singlecaseReport.Age > 5 && singlecaseReport.Sex == Sex.Male ? 1 : 0,
                    Latitude  = @event.Latitude,
                    Longitude = @event.Longitude,
                    Timestamp = @event.Sent
                });
            }
            else
            {
                var report     = caseReportContent as MultipleCaseReportContent;
                var healthRisk = _healthRisks.GetByReadableId(report.HealthRiskId);
                if (dataCollector == null)
                {
                    _eventEmitter.Emit(Feature, new AnonymousCaseReportRecieved
                    {
                        Id                    = Guid.NewGuid(),
                        PhoneNumber           = @event.OriginNumber,
                        HealthRiskId          = healthRisk.Id,
                        NumberOfFemalesUnder5 = report.FemalesUnder5,
                        NumberOfFemalesOver5  = report.FemalesOver5,
                        NumberOfMalesUnder5   = report.MalesUnder5,
                        NumberOfMalesOver5    = report.MalesOver5,
                        Latitude              = @event.Latitude,
                        Longitude             = @event.Longitude,
                        Timestamp             = @event.Sent
                    });
                    return;
                }
                _eventEmitter.Emit(Feature, new CaseReportReceived
                {
                    Id = Guid.NewGuid(),
                    DataCollectorId       = dataCollector.Id,
                    HealthRiskId          = healthRisk.Id,
                    NumberOfFemalesUnder5 = report.FemalesUnder5,
                    NumberOfFemalesOver5  = report.FemalesOver5,
                    NumberOfMalesUnder5   = report.MalesUnder5,
                    NumberOfMalesOver5    = report.MalesOver5,
                    Latitude  = @event.Latitude,
                    Longitude = @event.Longitude,
                    Timestamp = @event.Sent
                });
            }
        }