private async Task ContinueOrderingProcess(IMessageHandlerContext context)
 {
     if (Data.GracePeriodIsOver && Data.StockConfirmed)
     {
         var stockConfirmedEvent = new OrderStatusChangedToStockConfirmedIntegrationEvent(Data.OrderIdentifier);
         await context.Publish(stockConfirmedEvent);
     }
 }
Exemple #2
0
        public async Task Handle(OrderStatusChangedToStockConfirmedDomainEvent orderStatusChangedToStockConfirmedDomainEvent, CancellationToken cancellationToken)
        {
            _logger.CreateLogger(nameof(OrderStatusChangedToStockConfirmedDomainEventHandler))
            .LogTrace($"Order with Id: {orderStatusChangedToStockConfirmedDomainEvent.OrderId} has been successfully updated with " +
                      $"a status order id: {OrderStatus.StockConfirmed.Id}");

            var orderStatusChangedToStockConfirmedIntegrationEvent = new OrderStatusChangedToStockConfirmedIntegrationEvent(orderStatusChangedToStockConfirmedDomainEvent.OrderId);
            await _orderingIntegrationEventService.PublishThroughEventBusAsync(orderStatusChangedToStockConfirmedIntegrationEvent);
        }
Exemple #3
0
        public async Task Handle(OrderStatusChangedToStockConfirmedDomainEvent orderStatusChangedToStockConfirmedDomainEvent)
        {
            _logger.CreateLogger(nameof(OrderStatusChangedToStockConfirmedDomainEventHandler))
            .LogTrace($"Order with Id: {orderStatusChangedToStockConfirmedDomainEvent.OrderId} has been successfully updated with " +
                      $"a status order id: {OrderStatus.StockConfirmed.Id}");

            var orderStatusChangedToStockConfirmedIntegrationEvent = new OrderStatusChangedToStockConfirmedIntegrationEvent(orderStatusChangedToStockConfirmedDomainEvent.OrderId);
            await _endpoint.Publish(orderStatusChangedToStockConfirmedIntegrationEvent);
        }
        public async Task Handle(OrderStatusChangedToStockConfirmedDomainEvent orderStatusChangedToStockConfirmedDomainEvent, CancellationToken cancellationToken)
        {
            var order = await _orderRepository.GetAsync(orderStatusChangedToStockConfirmedDomainEvent.OrderId);

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

            var orderStatusChangedToStockConfirmedIntegrationEvent = new OrderStatusChangedToStockConfirmedIntegrationEvent(order.Id, order.OrderStatus.Name, buyer.Name);
            await _messageOutbox.Send(orderStatusChangedToStockConfirmedIntegrationEvent);
        }
        public async Task Handle(OrderStatusChangedToStockConfirmedDomainEvent orderStatusChangedToStockConfirmedDomainEvent, CancellationToken cancellationToken)
        {
            _logger.CreateLogger <OrderStatusChangedToStockConfirmedDomainEventHandler>()
            .LogTrace("Order with Id: {OrderId} has been successfully updated to status {Status} ({Id})",
                      orderStatusChangedToStockConfirmedDomainEvent.OrderId, nameof(OrderStatus.StockConfirmed), OrderStatus.StockConfirmed.Id);

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

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

            var orderStatusChangedToStockConfirmedIntegrationEvent = new OrderStatusChangedToStockConfirmedIntegrationEvent(order.Id, order.OrderStatus.Name, buyer.Name);
            await _orderingIntegrationEventService.AddAndSaveEventAsync(orderStatusChangedToStockConfirmedIntegrationEvent);
        }
Exemple #6
0
        public async Task HandleAsync(IDomainEvent <Order, OrderId, OrderStatusChangedToStockConfirmedDomainEvent> 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);

            Console.WriteLine("BuyerId: " + order.GetBuyerId);
            Console.WriteLine(JsonConvert.SerializeObject(buyer));

            var orderStatusChangedToStockConfirmedIntegrationEvent = new OrderStatusChangedToStockConfirmedIntegrationEvent(order.Id.Value, order.OrderStatus.Name, order.GetBuyerId.Value, "bob", order.OrderItems.Sum(x => x.UnitPrice * x.Units));
            await _endpoint.Publish(orderStatusChangedToStockConfirmedIntegrationEvent);
        }
        public async Task Handle(
            OrderStatusChangedToStockConfirmedDomainEvent orderStatusChangedToStockConfirmedDomainEvent,
            CancellationToken cancellationToken)
        {
            _logger.CreateLogger(nameof(OrderStatusChangedToStockConfirmedDomainEventHandler))
                .LogTrace(
                    $"Order with Id: {orderStatusChangedToStockConfirmedDomainEvent.OrderId} has been successfully updated with " +
                    $"a status order id: {OrderStatus.StockConfirmed.Id}");

            var order = await _orderRepository.GetAsync(orderStatusChangedToStockConfirmedDomainEvent.OrderId);
            var buyer = await _buyerRepository.FindByIdAsync(order.GetBuyerId.Value.ToString());

            var orderStatusChangedToStockConfirmedIntegrationEvent =
                new OrderStatusChangedToStockConfirmedIntegrationEvent(order.Id, order.OrderStatus.Name, buyer.Name);
            await _orderingIntegrationEventService.PublishThroughEventBusAsync(orderStatusChangedToStockConfirmedIntegrationEvent.OrderId, orderStatusChangedToStockConfirmedIntegrationEvent.OrderStatus,
                orderStatusChangedToStockConfirmedIntegrationEvent);
        }
        private async Task ValidateOrder(Order order)
        {
            await Task.Delay(10 * 1000);

            if (await HasOrderItemsOnStock(order))
            {
                order.SetStockConfirmedStatus();
                var orderStatusChangedToStockConfirmedIntegrationEvent = new OrderStatusChangedToStockConfirmedIntegrationEvent(order.Id);
                _eventBus.Publish(orderStatusChangedToStockConfirmedIntegrationEvent);
            }
            else
            {
                order.SetStockRejectedStatus();
            }

            await _orderingContext.SaveChangesAsync();
        }
        public async Task Handle(OrderStatusChangedToStockConfirmedDomainEvent notification, CancellationToken cancellationToken)
        {
            _logger.LogInformation(" [x] SendStockConfirmedIntegrationEventWhenStockConfirmed: " +
                                   "Preparing integration event: OrderStatusChangedToStockConfirmedIntegrationEvent");

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

            var buyer = await _buyerRepository.FindByIdAsync(Convert.ToInt32(order.GetBuyerId));

            var paymentMethod = buyer.PaymentMethods.First();

            var integrationEvent = new OrderStatusChangedToStockConfirmedIntegrationEvent(notification.OrderId, buyer: buyer.Name,
                                                                                          paymentMethod: PaymentMethodDTO.ToPaymentMethodDto(paymentMethod));


            _logger.LogInformation(" [x] SendStockConfirmedIntegrationEventWhenStockConfirmed: " +
                                   "Integration event is publishing through event bus. Order ID: {0}, Buyer: {1}, PaymentMethod: {2}",
                                   order.Id, buyer.Name, paymentMethod.CardNumber);

            await _orderingIntegrationEventService.AddIntegrationEventToLog(integrationEvent, null);

            await _orderingIntegrationEventService.PublishEvent(integrationEvent);
        }