protected ExchangeEntryRate getRateFromHistoricalProviderFromAllSupportedCurrencies(Instant timestamp) { List<CurrencyType> enabledCryptoCurrencies = ratesAppConfigHolder.getEnabledCryptoCurrencies(); ExchangeEntryRate exchangeEntryRate = new ExchangeEntryRate(Date.from(Instant.now()), ExchangeType.CRYPTOCOMPARE); // for each enabled crypto currency enabledCryptoCurrencies.stream().forEach((enabledCryptoCurrency) -> { // get rate from the historical provider getRateFromHistoricalProvider(enabledCryptoCurrency, timestamp) // if the rate could be fetched, then create a new ExchangeCurrencyRate object .map((v) -> new ExchangeCurrencyRate(enabledCryptoCurrency, v)) // and, if present, add to the ExchangeEntryRate object .ifPresent((currencyRate) -> exchangeEntryRate.addCurrencyRate(currencyRate)); }); return exchangeEntryRate; }
private void getRateAndAddCurrencyRate(ExchangeEntryRate exchangeEntryRate, ExchangeType exchangeType, CurrencyType cryptoType, CurrencyType fiatType) { Optional<BigDecimal> oRate = getRate(exchangeType, new CurrencyPair(Currency.getInstance(cryptoType.toString()), convertCurrencyTypes(fiatType))); oRate.ifPresent((rate) -> { ExchangeCurrencyRate exchangeCurrencyRate = new ExchangeCurrencyRate(cryptoType, rate); exchangeEntryRate.addCurrencyRate(exchangeCurrencyRate); }); }
private ExchangeAggregateRate createExchangeAggregateRateWithMultipleExchangeEntry(ExchangeType... exchangeTypes) { ExchangeAggregateRate aggregateRate = createExchangeAggregateRate(); Arrays.asList(exchangeTypes).stream().forEach((type) -> { ExchangeEntryRate entryRate = createExchangeEntryRate(type); ExchangeCurrencyRate rateBTC = createExchangeCurrencyRate(CurrencyType.BTC); ExchangeCurrencyRate rateETH = createExchangeCurrencyRate(CurrencyType.ETH); entryRate.addCurrencyRate(rateBTC); entryRate.addCurrencyRate(rateETH); aggregateRate.addExchangeEntry(entryRate); }); ExchangeAggregateCurrencyRate aggregateCurrencyRateBTC = createExchangeAggregateCurrencyRate( CurrencyType.BTC, aggregateRate.getAllExchangeCurrencyRates(CurrencyType.BTC)); ExchangeAggregateCurrencyRate aggregateCurrencyRateETH = createExchangeAggregateCurrencyRate( CurrencyType.ETH, aggregateRate.getAllExchangeCurrencyRates(CurrencyType.ETH)); aggregateRate.addExchangeAggregateCurrencyRate(aggregateCurrencyRateBTC); aggregateRate.addExchangeAggregateCurrencyRate(aggregateCurrencyRateETH); aggregateRateRepository.save(aggregateRate); return aggregateRate; }