Пример #1
0
        private async Task Handle(OrderHistoryEvent e)
        {
            var order        = e.OrderSnapshot;
            var isBasicOrder = new[]
            {
                OrderTypeContract.Market,
                OrderTypeContract.Limit,
                OrderTypeContract.Stop
            }
            .Contains(order.Type);

            if (!isBasicOrder || !order.ProductComplexityConfirmationReceived())
            {
                return;
            }

            _log.LogInformation($"Product complexity confirmation received for account {order.AccountId} and orderId {order.Id}");

            var entity = await _complexityWarningRepository.GetOrCreate(order.AccountId,
                                                                        () => ComplexityWarningState.Start(order.AccountId));

            entity.OnConfirmedOrderReceived(order.Id, order.CreatedTimestamp, _settings.ComplexityWarningsCount, out var confirmationFlagShouldBeSwitched);

            if (confirmationFlagShouldBeSwitched)
            {
                await _accountManagementService.UpdateComplexityWarningFlag(order.AccountId, shouldShowProductComplexityWarning : false, order.Id);

                _log.LogInformation($"Flag {BrokerFeature.ProductComplexityWarning} for account {entity.AccountId} is switched to off");
            }

            await _complexityWarningRepository.Save(entity);
        }
Пример #2
0
        public Task OrderHistory(Order order, OrderUpdateType orderUpdateType, string activitiesMetadata = null)
        {
            var relatedOrders = new List <Order>();

            foreach (var relatedOrderInfo in order.RelatedOrders)
            {
                if (_orderReader.TryGetOrderById(relatedOrderInfo.Id, out var relatedOrder))
                {
                    relatedOrders.Add(relatedOrder);
                }
            }

            var historyEvent = new OrderHistoryEvent
            {
                OrderSnapshot      = order.ConvertToContract(relatedOrders),
                Timestamp          = _dateService.Now(),
                Type               = orderUpdateType.ToType <OrderHistoryTypeContract>(),
                ActivitiesMetadata = activitiesMetadata
            };

            return(TryProduceMessageAsync(_settings.RabbitMqQueues.OrderHistory.ExchangeName, historyEvent));
        }