public async Task <List <CryptoPrice> > GetPricesForDates(CryptoCurrency baseCurrency, List <DateTime> dates, CryptoCurrency quoteCurrency = CryptoCurrency.USD) { var prices = _repository.GetCryptoPricesSpecificDates(baseCurrency.ToString(), quoteCurrency.ToString(), dates); if (prices.Count != dates.Count) { var priceDates = prices.Select(x => x.Timestamp); foreach (var dateTime in dates.Where(dateTime => !priceDates.Contains(dateTime) && DateTime.Today.AddMonths(-12) < dateTime)) { var providerPrices = await _cryptoProxy.GetCryptoPrices(baseCurrency, quoteCurrency, dateTime, dateTime); _repository.SavePrices(providerPrices); prices.AddRange(providerPrices); } } return(prices.OrderByDescending(x => x.Timestamp).ToList()); }