Example #1
0
 public static RatesResponse MapToResponse(this RatesResultModel resultModel)
 {
     return(new RatesResponse
     {
         AverageRate = resultModel.AverageRate,
         DateOfMaxRate = resultModel.DateOfMaxRate,
         DateOfMinRate = resultModel.DateOfMinRate,
         MaxRate = resultModel.MaxRate,
         MinRate = resultModel.MinRate
     });
 }
        public RatesResultModel FilterAndCompute(RatesInputModel input)
        {
            var result = new RatesResultModel
            {
                MaxRate = (double)0,
                MinRate = Double.MaxValue
            };

            GetHistoryByCurrency(input.BaseCurrency);

            double ratesSum      = 0;
            int    existingDates = 0;

            foreach (var date in input.Dates)
            {
                if (!_rates.ContainsKey(input.BaseCurrency))
                {
                    continue;
                }

                if (_rates[input.BaseCurrency].Rates.TryGetValue(date, out var currencies))
                {
                    existingDates++;

                    if (currencies.ContainsKey(input.TargetCurrency))
                    {
                        if (currencies.TryGetValue(input.TargetCurrency, out var rate))
                        {
                            if (result.MaxRate < rate)
                            {
                                result.MaxRate       = rate;
                                result.DateOfMaxRate = date;
                            }

                            if (result.MinRate > rate)
                            {
                                result.MinRate       = rate;
                                result.DateOfMinRate = date;
                            }

                            ratesSum += rate;
                        }
                    }
                }
            }

            if (existingDates > 0)
            {
                result.AverageRate = ratesSum / existingDates;
            }

            return(result);
        }