예제 #1
0
        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());
        }