Example #1
0
        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));
            }
        }
Example #3
0
        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);
            }
        }