public async Task <List <CryptoPrice> > GetPricesForDateRange(CryptoCurrency baseCurrency, DateTime startDate, DateTime endDate, CryptoCurrency quoteCurrency = CryptoCurrency.USD) { var cryptoPrices = _repository.GetCryptoPrices(baseCurrency.ToString(), quoteCurrency.ToString(), startDate, endDate); var lastDbPriceDate = cryptoPrices.Count > 1 ? cryptoPrices.Max(x => x.Timestamp) : startDate.AddDays(-1); if (lastDbPriceDate < endDate) { var providerPrices = await _cryptoProxy.GetCryptoPrices(baseCurrency, quoteCurrency, lastDbPriceDate.AddDays(1), endDate); _repository.SavePrices(providerPrices); cryptoPrices.AddRange(providerPrices); } return(cryptoPrices.OrderBy(x => x.Timestamp).ToList()); }