private async Task UpdateAccount(Coinbase.Models.Account coinbaseAccount, IEnumerable <AccountDto> accountsInDb) { var exchangeRate = await _exchangeRateService.GetExchangeRate(coinbaseAccount.Currency.Code); if (exchangeRate == null) { _logger.LogWarning("Could not get exchange rate for currency {Currency}", coinbaseAccount.Currency.Name); return; } var correspondingAccountInDb = accountsInDb.FirstOrDefault(x => x.Currency.ToString() == coinbaseAccount.Currency.Code); if (correspondingAccountInDb == null) { correspondingAccountInDb = new AccountDto { Currency = coinbaseAccount.Currency.Code, Balance = coinbaseAccount.Balance.Amount * exchangeRate.NOKRate, Exchange = "Coinbase" }; _dbRepository.QueueAdd <Account, AccountDto>(correspondingAccountInDb); } else { correspondingAccountInDb.Balance = coinbaseAccount.Balance.Amount * exchangeRate.NOKRate; _dbRepository.QueueUpdate <Account, AccountDto>(correspondingAccountInDb); } }
public async Task <ExchangeRateDto?> CreateOrUpdateExchangeRate(string currency) { var exchangeRateFromCoinbase = await _coinbaseConnector.GetExchangeRatesForCurrency(currency); if (exchangeRateFromCoinbase == null) { _logger.LogError("Data from Coinbase for exchange rate {Currency} was null", currency); return(null); } var nokRate = exchangeRateFromCoinbase.Rates[ExchangeRateConstants.NOK]; var usdRate = exchangeRateFromCoinbase.Rates[ExchangeRateConstants.USD]; var eurRate = exchangeRateFromCoinbase.Rates[ExchangeRateConstants.EUR]; var exchangeRates = await _exchangeRateProvider.GetExchangeRates(new ExchangeRateSearchParameters { Currencies = new [] { currency } }); var exchangeRate = exchangeRates.FirstOrDefault(); if (exchangeRate != null) { exchangeRate.NOKRate = nokRate; exchangeRate.USDRate = usdRate; exchangeRate.EURRate = eurRate; _dbRepository.QueueUpdate <ExchangeRate, ExchangeRateDto>(exchangeRate); } else { exchangeRate = new ExchangeRateDto { Currency = currency, NOKRate = nokRate, USDRate = usdRate, EURRate = eurRate }; _dbRepository.QueueAdd <ExchangeRate, ExchangeRateDto>(exchangeRate); } await _dbRepository.ExecuteQueueAsync(); return(exchangeRate); }
private void UpdateAssetHistory(AssetHistoryDto assetHistoryForCurrentDay, AccountDto account) { assetHistoryForCurrentDay.Value = (int)account.Balance; _dbRepository.QueueUpdate <Asset, AssetHistoryDto>(assetHistoryForCurrentDay); }