public async Task SynchronizeWalletsAsync() { var walletsWithBalances = (await _bitcoinApiWrapper.TryListWalletsWithBalancesAsync().ConfigureAwait(false)).ToList(); await _walletRepository.TryUpdateWalletsAsync(walletsWithBalances).ConfigureAwait(false); var walletsWithTransactions = (await Task.WhenAll(walletsWithBalances.Select(async wallet => { var transactions = await _bitcoinApiWrapper.TryListTransactionsAsync(wallet.Name).ConfigureAwait(false); foreach (var transaction in transactions) { wallet.Transactions.Add(transaction); } return(wallet); })).ConfigureAwait(false)).ToList(); await _walletRepository.TryUpdateTransactionsAsync(walletsWithTransactions).ConfigureAwait(false); }
public async Task <SendBtcResultDto> SendBtcAsync(SendBtcDto btc) { var wallets = await _bitcoinApiWrapper.TryListWalletsWithBalancesAsync().ConfigureAwait(false); var walletsList = wallets.Where(x => x.Balance > btc.Amount).ToList(); if (walletsList.Count == 0) { throw new Exception(Errors.NotEnoughFundsError); } var rand = new Random(DateTime.Now.Millisecond); var randIndex = rand.Next(0, walletsList.Count); var randomWallet = walletsList[randIndex]; string transactionId = await _bitcoinApiWrapper.TrySendBtcAsync(btc, randomWallet.Name).ConfigureAwait(false); return(new SendBtcResultDto() { TransactionId = transactionId }); }