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); }
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)); }