public async Task <bool> ProcessMessage(CashInOutQueueMessage queueMessage) { var transaction = await _bitcoinTransactionsRepository.FindByTransactionIdAsync(queueMessage.Id); if (transaction == null) { // external cashin if (_cashOperationsRepository.GetAsync(queueMessage.ClientId, queueMessage.Id) != null) { return(await ProcessExternalCashin(queueMessage)); } await _log.WriteWarningAsync(nameof(CashInOutQueue), nameof(ProcessMessage), queueMessage.ToJson(), "unkown transaction"); return(false); } try { switch (transaction.CommandType) { case BitCoinCommands.Issue: return(await ProcessIssue(transaction, queueMessage)); case BitCoinCommands.CashOut: return(await ProcessCashOut(transaction, queueMessage)); case BitCoinCommands.Destroy: return(await ProcessDestroy(transaction, queueMessage)); case BitCoinCommands.ManualUpdate: return(await ProcessManualOperation(transaction, queueMessage)); default: await _log.WriteWarningAsync(nameof(CashInOutQueue), nameof(ProcessMessage), queueMessage.ToJson(), $"Unknown command type (value = [{transaction.CommandType}])"); return(false); } } catch (Exception ex) { await _log.WriteErrorAsync(nameof(CashInOutQueue), nameof(ProcessMessage), queueMessage.ToJson(), ex); return(false); } }
public async Task <List <HistoryEntry> > GetHistory(string clientId) { var records = new List <HistoryEntry>(); HistoryEntry[] cashOperations = null; HistoryEntry[] tradeOperations = null; HistoryEntry[] transferOperations = null; HistoryEntry[] cashOutAttemptOperations = null; HistoryEntry[] limitTradeEvents = null; Dictionary <string, IMarketOrder> marketOrders = null; var cashOperationsRead = _cashOperationsRepository.GetAsync(clientId); var tradeOperationsRead = _clientTradesRepository.GetAsync(clientId); var transferOperationsRead = _transferEventsRepository.GetAsync(clientId); var cashOutAttemptsRead = _cashOutAttemptRepository.GetRequestsAsync(clientId); var limiTradeEventsRead = _limitTradeEventsRepository.GetEventsAsync(clientId); var marketOrdersRead = _marketOrdersRepository.GetOrdersAsync(clientId); await Task.WhenAll( cashOperationsRead.ContinueWith(t => cashOperations = t.Result.Select(RepoMapper.MapFrom).ToArray()), tradeOperationsRead.ContinueWith(t => tradeOperations = t.Result.Select(RepoMapper.MapFrom).ToArray()), transferOperationsRead.ContinueWith(t => transferOperations = t.Result.Select(RepoMapper.MapFrom).ToArray()), cashOutAttemptsRead.ContinueWith(t => cashOutAttemptOperations = t.Result.Select(RepoMapper.MapFrom).ToArray()), limiTradeEventsRead.ContinueWith(t => limitTradeEvents = t.Result.Select(RepoMapper.MapFrom).ToArray()), marketOrdersRead.ContinueWith(t => marketOrders = t.Result.Where(x => !string.IsNullOrEmpty(x.Id)).ToDictionary(x => x.Id)) ); records.AddRange(cashOperations); records.AddRange(tradeOperations); records.AddRange(transferOperations); records.AddRange(cashOutAttemptOperations); records.AddRange(limitTradeEvents); await AddMarketOrdersInfo(records, marketOrders); return(records); }