예제 #1
0
        private async Task <Result <ElectionResultsData> > GetResultsByType(ResultsType type, string location)
        {
            try
            {
                string resultsType          = type.ConvertEnumToString();
                var    localResultsResponse = await _resultsRepository.GetLatestResults(Consts.LOCAL, resultsType);

                var diasporaResultsResponse = await _resultsRepository.GetLatestResults(Consts.DIASPORA, resultsType);

                if (localResultsResponse.IsFailure || diasporaResultsResponse.IsFailure)
                {
                    return(Result.Failure <ElectionResultsData>("Failed to retrieve data"));
                }
                var localResultsData    = JsonConvert.DeserializeObject <ElectionResultsData>(localResultsResponse.Value.StatisticsJson);
                var diasporaResultsData = JsonConvert.DeserializeObject <ElectionResultsData>(diasporaResultsResponse.Value.StatisticsJson);
                var electionResultsData = StatisticsAggregator.CombineResults(localResultsData, diasporaResultsData);

                electionResultsData.Candidates.FirstOrDefault(c => c.Id == "g1").Votes  = 3485292;
                electionResultsData.Candidates.FirstOrDefault(c => c.Id == "g2").Votes  = 527098;
                electionResultsData.Candidates.FirstOrDefault(c => c.Id == "g3").Votes  = 1384450;
                electionResultsData.Candidates.FirstOrDefault(c => c.Id == "g4").Votes  = 357014;
                electionResultsData.Candidates.FirstOrDefault(c => c.Id == "g5").Votes  = 2051725;
                electionResultsData.Candidates.FirstOrDefault(c => c.Id == "g6").Votes  = 32787;
                electionResultsData.Candidates.FirstOrDefault(c => c.Id == "g7").Votes  = 30884;
                electionResultsData.Candidates.FirstOrDefault(c => c.Id == "g8").Votes  = 30850;
                electionResultsData.Candidates.FirstOrDefault(c => c.Id == "g9").Votes  = 27769;
                electionResultsData.Candidates.FirstOrDefault(c => c.Id == "g10").Votes = 815201;
                electionResultsData.Candidates.FirstOrDefault(c => c.Id == "g11").Votes = 39192;
                electionResultsData.Candidates.FirstOrDefault(c => c.Id == "g12").Votes = 244275;
                electionResultsData.Candidates.FirstOrDefault(c => c.Id == "g13").Votes = 48662;
                electionResultsData.Candidates.FirstOrDefault(c => c.Id == "g14").Votes = 141316;
                _totalCounted = electionResultsData.Candidates.Sum(c => c.Votes);
                if (string.IsNullOrWhiteSpace(location) == false)
                {
                    if (location == "TOTAL")
                    {
                        return(Result.Ok(electionResultsData));
                    }
                    if (location == "DSPR")
                    {
                        return(Result.Ok(diasporaResultsData));
                    }
                    if (location == "RO")
                    {
                        return(Result.Ok(localResultsData));
                    }
                    foreach (var candidate in electionResultsData.Candidates)
                    {
                        candidate.Votes = candidate.Counties[location];
                    }
                }
                return(Result.Ok(electionResultsData));
            }
            catch (Exception e)
            {
                _logger.LogError(e, $"Failed to retrieve results for type {type} and location {location}");
                return(Result.Failure <ElectionResultsData>(e.Message));
            }
        }
예제 #2
0
        public async Task <ElectionResultsData> GetResults(ResultsType type)
        {
            string resultsType = type.ConvertEnumToString();

            var localResults = await _resultsRepository.GetLatestResults(Consts.LOCAL, resultsType);

            var diasporaResults = await _resultsRepository.GetLatestResults(Consts.DIASPORA, resultsType);

            var localResultsData    = JsonConvert.DeserializeObject <ElectionResultsData>(localResults.StatisticsJson);
            var diasporaResultsData = JsonConvert.DeserializeObject <ElectionResultsData>(diasporaResults.StatisticsJson);
            var electionResultsData = StatisticsAggregator.CombineResults(localResultsData, diasporaResultsData);

            return(electionResultsData);
        }
예제 #3
0
        private async Task <Result <ElectionResultsData> > GetResultsByType(ResultsType type, string location)
        {
            try
            {
                string resultsType          = type.ConvertEnumToString();
                var    localResultsResponse = await _resultsRepository.GetLatestResults(Consts.LOCAL, resultsType);

                var diasporaResultsResponse = await _resultsRepository.GetLatestResults(Consts.DIASPORA, resultsType);

                if (localResultsResponse.IsFailure || diasporaResultsResponse.IsFailure)
                {
                    return(Result.Failure <ElectionResultsData>("Failed to retrieve data"));
                }
                var localResultsData    = JsonConvert.DeserializeObject <ElectionResultsData>(localResultsResponse.Value.StatisticsJson);
                var diasporaResultsData = JsonConvert.DeserializeObject <ElectionResultsData>(diasporaResultsResponse.Value.StatisticsJson);
                var electionResultsData = StatisticsAggregator.CombineResults(localResultsData, diasporaResultsData);
                if (string.IsNullOrWhiteSpace(location) == false)
                {
                    if (location == "TOTAL")
                    {
                        return(Result.Ok(electionResultsData));
                    }
                    if (location == "DSPR")
                    {
                        return(Result.Ok(diasporaResultsData));
                    }
                    if (location == "RO")
                    {
                        return(Result.Ok(localResultsData));
                    }
                    foreach (var candidate in electionResultsData.Candidates)
                    {
                        candidate.Votes = candidate.Counties[location];
                    }
                }
                return(Result.Ok(electionResultsData));
            }
            catch (Exception e)
            {
                _logger.LogError(e, $"Failed to retrieve results for type {type} and location {location}");
                return(Result.Failure <ElectionResultsData>(e.Message));
            }
        }
예제 #4
0
        public async Task <ActionResult <LiveResultsResponse> > GetLatestResults([FromQuery] ResultsType type, string location)
        {
            try
            {
                var key    = $"results-{type.ConvertEnumToString()}-{location}";
                var result = await _appCache.GetOrAddAsync(
                    key, () => _resultsAggregator.GetResults(type, location), DateTimeOffset.Now.AddMinutes(5));

                if (result.IsFailure)
                {
                    _appCache.Remove(key);
                    _logger.LogError(result.Error);
                    return(BadRequest(result.Error));
                }
                return(result.Value);
            }
            catch (Exception e)
            {
                _logger.LogError(e, "Exception encountered while retrieving results");
                throw;
            }
        }