public async Task HandleAsync(IReadOnlyCollection <ExecutionEvent> executionEvents) { var pairs = executionEvents.Select(Map).ToArray(); var orders = pairs.SelectMany(x => x.Orders).ToList(); var orderEvents = pairs.SelectMany(x => x.OrderEvent).ToList(); var batchId = Guid.NewGuid().ToString(); foreach (var order in orders.Where(x => _walletIds.Contains(x.WalletId.ToString()))) { _log.Info("Saving order (ProcessBatch)", context: $"order: {new { order.Id, order.Status, order.SequenceNumber, batchId }.ToJson()}"); } await _ordersRepository.UpsertBulkAsync(orders); var trades = orders.SelectMany(x => x.Trades)?.ToArray(); if (trades.Any()) { var batched = trades.Batch(TradesBulkSize).ToArray(); foreach (var tradesBatch in batched) { await _historyRecordsRepository.InsertBulkAsync(tradesBatch); } } { foreach (var batch in orderEvents.Batch(TradesBulkSize)) { await _historyRecordsRepository.InsertBulkAsync(batch); } } }
protected override async Task ProcessBatch(IList <CustomQueueItem <IEnumerable <Order> > > batch) { var orders = batch.SelectMany(x => x.Value).ToList(); var batchId = Guid.NewGuid().ToString(); foreach (var order in orders.Where(x => WalletIds.Contains(x.WalletId.ToString()))) { Log.Info("Saving order (ProcessBatch)", context: $"order: {new {order.Id, order.Status, order.SequenceNumber, batchId}.ToJson()}"); } await _ordersRepository.UpsertBulkAsync(orders); var trades = orders.SelectMany(x => x.Trades); var batched = trades.Batch(TradesBulkSize).ToList(); foreach (var tradesBatch in batched) { await _historyRecordsRepository.InsertBulkAsync(tradesBatch); } }
protected override Task ProcessBatch(IList <CustomQueueItem <OrderEvent> > batch) { return(_historyRecordsRepository.InsertBulkAsync(batch.Select(x => x.Value))); }