示例#1
0
        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)));
 }