using Microsoft.AspNetCore.SignalR; using Microsoft.eShopOnContainers.BuildingBlocks.EventBus.Abstractions; using Microsoft.Extensions.Logging; using Ordering.SignalrHub.IntegrationEvents.Events; using Serilog.Context; using System; using System.Threading.Tasks; namespace Ordering.SignalrHub.IntegrationEvents.EventHandling { public class OrderStatusChangedToPaidIntegrationEventHandler : IIntegrationEventHandler { private readonly IHubContext _hubContext; private readonly ILogger _logger; public OrderStatusChangedToPaidIntegrationEventHandler( IHubContext hubContext, ILogger logger) { _hubContext = hubContext ?? throw new ArgumentNullException(nameof(hubContext)); _logger = logger ?? throw new ArgumentNullException(nameof(logger)); } public async Task Handle(OrderStatusChangedToPaidIntegrationEvent @event) { using (LogContext.PushProperty("IntegrationEventContext", $"{@event.Id}-{Program.AppName}")) { _logger.LogInformation("----- Handling integration event: {IntegrationEventId} at {AppName} - ({@IntegrationEvent})", @event.Id, Program.AppName, @event); await _hubContext.Clients .Group(@event.BuyerName) .SendAsync("UpdatedOrderState", new { OrderId = @event.OrderId, Status = @event.OrderStatus }); } } } }