From bb04842fe1a4f85f3b983451b1b9e908fdcedfc4 Mon Sep 17 00:00:00 2001 From: hsn Date: Tue, 11 Jul 2023 08:32:11 +0300 Subject: [PATCH] SignalHub OrderCompleted is added --- ...angedToCompletedIntegrationEventHandler.cs | 30 +++++++++++++++++++ ...tatusChangedToCompletedIntegrationEvent.cs | 16 ++++++++++ .../Ordering/Ordering.SignalrHub/Program.cs | 2 ++ 3 files changed, 48 insertions(+) create mode 100644 src/Services/Ordering/Ordering.SignalrHub/IntegrationEvents/EventHandling/OrderStatusChangedToCompletedIntegrationEventHandler.cs create mode 100644 src/Services/Ordering/Ordering.SignalrHub/IntegrationEvents/Events/OrderStatusChangedToCompletedIntegrationEvent.cs diff --git a/src/Services/Ordering/Ordering.SignalrHub/IntegrationEvents/EventHandling/OrderStatusChangedToCompletedIntegrationEventHandler.cs b/src/Services/Ordering/Ordering.SignalrHub/IntegrationEvents/EventHandling/OrderStatusChangedToCompletedIntegrationEventHandler.cs new file mode 100644 index 000000000..7824a26c3 --- /dev/null +++ b/src/Services/Ordering/Ordering.SignalrHub/IntegrationEvents/EventHandling/OrderStatusChangedToCompletedIntegrationEventHandler.cs @@ -0,0 +1,30 @@ +using System.Collections.Generic; + +namespace Microsoft.eShopOnContainers.Services.Ordering.SignalrHub.IntegrationEvents.EventHandling; + +public class OrderStatusChangedToCompletedIntegrationEventHandler : IIntegrationEventHandler +{ + private readonly IHubContext _hubContext; + private readonly ILogger _logger; + + public OrderStatusChangedToCompletedIntegrationEventHandler( + IHubContext hubContext, + ILogger logger) + { + _hubContext = hubContext ?? throw new ArgumentNullException(nameof(hubContext)); + _logger = logger ?? throw new ArgumentNullException(nameof(logger)); + } + + + public async Task Handle(OrderStatusChangedToCompletedIntegrationEvent @event) + { + using (_logger.BeginScope(new List> { new ("IntegrationEventContext", @event.Id) })) + { + _logger.LogInformation("Handling integration event: {IntegrationEventId} - ({@IntegrationEvent})", @event.Id, @event); + + await _hubContext.Clients + .Group(@event.BuyerName) + .SendAsync("UpdatedOrderState", new { OrderId = @event.OrderId, Status = @event.OrderStatus }); + } + } +} diff --git a/src/Services/Ordering/Ordering.SignalrHub/IntegrationEvents/Events/OrderStatusChangedToCompletedIntegrationEvent.cs b/src/Services/Ordering/Ordering.SignalrHub/IntegrationEvents/Events/OrderStatusChangedToCompletedIntegrationEvent.cs new file mode 100644 index 000000000..b8113bc69 --- /dev/null +++ b/src/Services/Ordering/Ordering.SignalrHub/IntegrationEvents/Events/OrderStatusChangedToCompletedIntegrationEvent.cs @@ -0,0 +1,16 @@ +namespace Microsoft.eShopOnContainers.Services.Ordering.SignalrHub.IntegrationEvents.Events; + +public record OrderStatusChangedToCompletedIntegrationEvent : IntegrationEvent +{ + public int OrderId { get; } + public string OrderStatus { get; } + public string BuyerName { get; } + + public OrderStatusChangedToCompletedIntegrationEvent(int orderId, string orderStatus, string buyerName) + { + OrderId = orderId; + OrderStatus = orderStatus; + BuyerName = buyerName; + } +} + diff --git a/src/Services/Ordering/Ordering.SignalrHub/Program.cs b/src/Services/Ordering/Ordering.SignalrHub/Program.cs index 1b0abd099..bfdbadd83 100644 --- a/src/Services/Ordering/Ordering.SignalrHub/Program.cs +++ b/src/Services/Ordering/Ordering.SignalrHub/Program.cs @@ -6,6 +6,7 @@ builder.Services.AddSignalR(builder.Configuration); builder.Services.AddSingleton, OrderStatusChangedToAwaitingValidationIntegrationEventHandler>(); builder.Services.AddSingleton, OrderStatusChangedToCancelledIntegrationEventHandler>(); +builder.Services.AddSingleton, OrderStatusChangedToCompletedIntegrationEventHandler>(); builder.Services.AddSingleton, OrderStatusChangedToPaidIntegrationEventHandler>(); builder.Services.AddSingleton, OrderStatusChangedToShippedIntegrationEventHandler>(); builder.Services.AddSingleton, OrderStatusChangedToStockConfirmedIntegrationEventHandler>(); @@ -24,6 +25,7 @@ eventBus.Subscribe(); eventBus.Subscribe(); eventBus.Subscribe(); +eventBus.Subscribe(); eventBus.Subscribe(); await app.RunAsync();