public async Task <ExchangeRatesResult> GetExchangeRates(ExchangeRatesRequest request)
        {
            ValidateCurrencies(request.BaseCurrency, request.TargetCurrency);
            ValidateDates(request.Dates);

            var tasks = request.Dates.Select(date => _connector.GetExchangeRate(date, request.BaseCurrency, request.TargetCurrency));
            var exchangeRatesResponses = await Task.WhenAll(tasks);

            var dateRateList = exchangeRatesResponses.Select(x => new { x.Date, Rate = x.Rates.First().Value })
                               .OrderBy(x => x.Rate)
                               .ToList();

            var minRate = dateRateList.First();
            var maxRate = dateRateList.Last();
            var average = dateRateList.Average(x => x.Rate);

            var minRateDate = new RateOnDate {
                Rate = minRate.Rate, Date = minRate.Date
            };
            var maxRateDate = new RateOnDate {
                Rate = maxRate.Rate, Date = maxRate.Date
            };

            return(new ExchangeRatesResult(minRateDate, maxRateDate, average));
        }
 public ExchangeRatesResult(RateOnDate minRate, RateOnDate maxRate, decimal averageRate)
 {
     MinRate     = minRate;
     MaxRate     = maxRate;
     AverageRate = averageRate;
 }