public async Task Handle(OrderStatusChangedToAwaitingValidationIntegrationEvent command) { var confirmedOrderStockItems = new List <ConfirmedOrderStockItem>(); foreach (var orderStockItem in command.OrderStockItems) { var catalogItem = _catalogContext.CatalogItems.Find(orderStockItem.ProductId); var hasStock = catalogItem.AvailableStock >= orderStockItem.Units; var confirmedOrderStockItem = new ConfirmedOrderStockItem(catalogItem.Id, hasStock); confirmedOrderStockItems.Add(confirmedOrderStockItem); } var confirmedIntegrationEvent = confirmedOrderStockItems.Any(c => !c.HasStock) ? (IntegrationEvent) new OrderStockRejectedIntegrationEvent(command.OrderId, confirmedOrderStockItems) : new OrderStockConfirmedIntegrationEvent(command.OrderId); await _catalogIntegrationEventService.SaveEventAndCatalogContextChangesAsync(confirmedIntegrationEvent); await _catalogIntegrationEventService.PublishThroughEventBusAsync(confirmedIntegrationEvent); }
public async Task Consume(ConsumeContext <OrderStatusChangedToAwaitingValidationIntegrationEvent> context) { var confirmedOrderStockItems = new List <ConfirmedOrderStockItem>(); foreach (var orderStockItem in context.Message.OrderStockItems) { var catalogItem = _catalogContext.CatalogItems.Find(orderStockItem.ProductId); var hasStock = catalogItem.AvailableStock >= orderStockItem.Units; var confirmedOrderStockItem = new ConfirmedOrderStockItem(catalogItem.Id, hasStock); confirmedOrderStockItems.Add(confirmedOrderStockItem); } if (confirmedOrderStockItems.Any(c => !c.HasStock)) { await context.Publish(new OrderStockRejectedIntegrationEvent(context.Message.OrderId, confirmedOrderStockItems)); } else { await context.Publish(new OrderStockConfirmedIntegrationEvent(context.Message.OrderId)); } }
public void Consume(OrderStatusChangedToAwaitingValidationIntegrationEvent command) { var confirmedOrderStockItems = command.CatalogItems.Select(orderStockItem => { var catalogItem = GetCatalogItemById(orderStockItem.ProductId); var hasStock = catalogItem.AvailableStock >= orderStockItem.Units; var confirmedOrderStockItem = new ConfirmedOrderStockItem { HasStock = hasStock, CatalogItemId = catalogItem.CatalogItemId }; return(confirmedOrderStockItem); }); if (confirmedOrderStockItems.Any(c => !c.HasStock)) { _manager.SendOrderStockRejectedIntegrationEvent(command.OrderId, confirmedOrderStockItems); } else { _manager.SendOrderStockConfirmedIntegrationEvent(command.OrderId); } }