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