using LiteCharms.Infrastructure.ServiceBus.Queues; namespace LiteCharms.Infrastructure.ServiceBus.Exchanges; public class EmailExchange(EmailQueue messages, ILogger logger, IPublisher mediator) : BackgroundService { protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { while (messages.Incoming.TryRead(out var message)) { try { switch (message.Name) { case "SendShopEmailEnquiryEvent": await mediator.Publish(message, stoppingToken); break; case "ProcessEmailNotificationsEvent": await mediator.Publish(message, stoppingToken); break; default: logger.LogWarning("Unsupported email event {Event}", message.Name); break; } } catch (Exception ex) { logger.LogError(ex, ex.Message); } } await Task.Delay(1000, stoppingToken); } } }