public Task HandleAsync(
     OrderStatusChangedToPaidIntegrationEvent integrationEvent)
 {
     // Save the updated status in the read model and notify the client via SignalR.
     return(UpdateReadModelAndSendNotificationAsync(integrationEvent.OrderId,
                                                    integrationEvent.OrderStatus, integrationEvent.Description, integrationEvent.BuyerId));
 }
        public async Task Handle(OrderStatusChangedToPaidDomainEvent notification, CancellationToken cancellationToken)
        {
            using (LogContext.PushProperty("IntegrationEventContext", $"{notification.OrderId}-{Program.AppName}"))
            {
                _logger.LogInformation("----- Handling integration event: {IntegrationEventId} : {AppName} - ({@IntegrationEvent})", notification.OrderId, Program.AppName, notification);

                var orderStatusChangedToPaidIntegrationEvent = new OrderStatusChangedToPaidIntegrationEvent(notification.OrderId);

                _eventBus.Publish(orderStatusChangedToPaidIntegrationEvent);
            }
        }
示例#3
0
        public async Task Handle(OrderStatusChangedToPaidDomainEvent orderStatusChangedToPaidDomainEvent, CancellationToken cancellationToken)
        {
            _logger.CreateLogger(nameof(OrderStatusChangedToPaidDomainEventHandler))
            .LogTrace($"Order with Id: {orderStatusChangedToPaidDomainEvent.OrderId} has been successfully updated with " +
                      $"a status order id: {OrderStatus.Paid.Id}");

            var orderStockList = orderStatusChangedToPaidDomainEvent.OrderItems
                                 .Select(orderItem => new { orderItem.ProductId, U = orderItem.GetUnits() });

            var orderStatusChangedToPaidIntegrationEvent = new OrderStatusChangedToPaidIntegrationEvent(orderStatusChangedToPaidDomainEvent.OrderId, orderStockList);
            await _orderingIntegrationEventService.PublishThroughEventBusAsync(orderStatusChangedToPaidIntegrationEvent);
        }
        public async Task Handle(OrderStatusChangedToPaidDomainEvent orderStatusChangedToPaidDomainEvent)
        {
            _logger.CreateLogger(nameof(OrderStatusChangedToPaidDomainEventHandler))
            .LogTrace($"Order with Id: {orderStatusChangedToPaidDomainEvent.OrderId} has been successfully updated with " +
                      $"a status order id: {OrderStatus.Paid.Id}");

            var orderStockList = orderStatusChangedToPaidDomainEvent.OrderItems
                                 .Select(orderItem => new OrderStockItem(orderItem.ProductId, orderItem.GetUnits()));

            var orderStatusChangedToPaidIntegrationEvent = new OrderStatusChangedToPaidIntegrationEvent(orderStatusChangedToPaidDomainEvent.OrderId,
                                                                                                        orderStockList);
            await _endpoint.Publish(orderStatusChangedToPaidIntegrationEvent);
        }
        public async Task Handle(OrderStatusChangedToPaidDomainEvent orderStatusChangedToPaidDomainEvent, CancellationToken cancellationToken)
        {
            var order = await _orderRepository.GetAsync(orderStatusChangedToPaidDomainEvent.OrderId);

            var buyer = await _buyerRepository.FindByIdAsync(order.GetBuyerId.Value.ToString());

            var orderStockList = orderStatusChangedToPaidDomainEvent.OrderItems.Select(orderItem => new OrderStockItem(orderItem.ProductId, orderItem.GetUnits()));

            var orderStatusChangedToPaidIntegrationEvent = new OrderStatusChangedToPaidIntegrationEvent(
                orderStatusChangedToPaidDomainEvent.OrderId,
                order.OrderStatus.Name,
                buyer.Name,
                orderStockList);
            await _messageOutbox.Send(orderStatusChangedToPaidIntegrationEvent);
        }
        public async Task Handle(OrderStatusChangedToPaidIntegrationEvent @event)
        {
            using (LogContext.PushProperty("IntegrationEventContext", $"{Program.AppName}"))
            {
                _logger.LogInformation("----- Handling integration event: {AppName} - ({@IntegrationEvent})", Program.AppName, @event);

                //we're not blocking stock/inventory
                foreach (var orderStockItem in @event.OrderStockItems)
                {
                    var catalogItem = _catalogContext.CatalogItems.Find(orderStockItem.ProductId);

                    catalogItem.RemoveStock(orderStockItem.Units);
                }

                await _catalogContext.SaveChangesAsync();
            }
        }
示例#7
0
        public async Task Handle(OrderStatusChangedToPaidDomainEvent orderStatusChangedToPaidDomainEvent, CancellationToken cancellationToken)
        {
            _logger.CreateLogger <OrderStatusChangedToPaidDomainEventHandler>()
            .LogTrace("Order with Id: {OrderId} has been successfully updated to status {Status} ({Id})",
                      orderStatusChangedToPaidDomainEvent.OrderId, nameof(OrderStatus.Paid), OrderStatus.Paid.Id);

            var order = await _orderRepository.GetAsync(orderStatusChangedToPaidDomainEvent.OrderId);

            var buyer = await _buyerRepository.FindByIdAsync(order.GetBuyerId.Value.ToString());

            var orderStockList = orderStatusChangedToPaidDomainEvent.OrderItems
                                 .Select(orderItem => new OrderStockItem(orderItem.ProductId, orderItem.GetUnits()));

            var orderStatusChangedToPaidIntegrationEvent = new OrderStatusChangedToPaidIntegrationEvent(
                orderStatusChangedToPaidDomainEvent.OrderId,
                order.OrderStatus.Name,
                buyer.Name,
                orderStockList);

            await _orderingIntegrationEventService.AddAndSaveEventAsync(orderStatusChangedToPaidIntegrationEvent);
        }
示例#8
0
        public async Task HandleAsync(IDomainEvent <Order, OrderId, OrderStatusChangedToPaidDomainEvent> domainEvent, CancellationToken cancellationToken)
        {
            var order = await _aggregateStore
                        .LoadAsync <Order, OrderId>(domainEvent.AggregateIdentity, CancellationToken.None)
                        .ConfigureAwait(false);

            var buyer = await _aggregateStore
                        .LoadAsync <Buyer, BuyerId>(order.GetBuyerId, CancellationToken.None)
                        .ConfigureAwait(false);

            var orderStockList = domainEvent.AggregateEvent.OrderItems
                                 .Select(orderItem => new OrderStockItem(orderItem.ProductId, orderItem.Units));

            var orderStatusChangedToPaidIntegrationEvent = new OrderStatusChangedToPaidIntegrationEvent(
                domainEvent.AggregateIdentity.Value,
                order.OrderStatus.Name,
                "bob",
                orderStockList);

            await _endpoint.Publish(orderStatusChangedToPaidIntegrationEvent);
        }
示例#9
0
        public async Task Handle(OrderPaymentSucceededIntegrationEvent @event)
        {
            _logger.LogInformation("----- Handling integration event: {IntegrationEventId} at {AppName} - ({@IntegrationEvent})", @event.Id, Program.AppName, @event);

            // Simulate a work time for setting paid status
            await Task.Delay(10 * 1000);

            var order = await _orderingContext.Orders
                        .Include(o => o.OrderItems)
                        .SingleAsync(o => o.Id == @event.OrderId);

            order.SetPaidStatus();
            await _orderingContext.SaveChangesAsync();

            var orderStockList = order.OrderItems
                                 .Select(orderItem => new OrderStockItem(orderItem.ProductId, orderItem.Units));
            var orderStatusChangedToPaidIntegrationEvent = new OrderStatusChangedToPaidIntegrationEvent(order.Id, orderStockList);

            _eventBus.Publish(orderStatusChangedToPaidIntegrationEvent);

            await Task.CompletedTask;
        }
示例#10
0
        public async Task Handle(OrderStatusChangedToPaidDomainEvent orderStatusChangedToPaidDomainEvent,
                                 CancellationToken cancellationToken)
        {
            _logger.CreateLogger(nameof(OrderStatusChangedToPaidDomainEventHandler))
            .LogTrace(
                $"Order with Id: {orderStatusChangedToPaidDomainEvent.OrderId} has been successfully updated with " +
                $"a status order id: {OrderStatus.Paid.Id}");

            var order = await _orderRepository.GetAsync(orderStatusChangedToPaidDomainEvent.OrderId);

            var buyer = await _buyerRepository.FindByIdAsync(order.GetBuyerId.Value.ToString());

            var orderStockList = orderStatusChangedToPaidDomainEvent.OrderItems
                                 .Select(orderItem => new OrderStockItem(orderItem.ProductId, orderItem.GetUnits()));

            var orderStatusChangedToPaidIntegrationEvent = new OrderStatusChangedToPaidIntegrationEvent(
                orderStatusChangedToPaidDomainEvent.OrderId,
                order.OrderStatus.Name,
                buyer.Name,
                orderStockList);

            await _orderingIntegrationEventService.PublishThroughEventBusAsync(orderStatusChangedToPaidIntegrationEvent.OrderId, orderStatusChangedToPaidIntegrationEvent.OrderStatus,
                                                                               orderStatusChangedToPaidIntegrationEvent);
        }
示例#11
0
 public async Task OrderStarted(OrderStatusChangedToPaidIntegrationEvent @event)
 {
     var handler = _serviceProvider.GetRequiredService <OrderStatusChangedToPaidIntegrationEventHandler>();
     await handler.Handle(@event);
 }
 public Task HandleAsync(
     OrderStatusChangedToPaidIntegrationEvent @event,
     [FromServices] OrderStatusChangedToPaidIntegrationEventHandler handler) =>
 handler.Handle(@event);