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; }