using LiteCharms.Features.Abstractions; using LiteCharms.Features.ServiceBus.Queues; namespace LiteCharms.Features.ServiceBus.Exchanges; public sealed class EmailExchange(EmailQueue messages, ILogger logger, IPublisher mediator) : BackgroundService { protected override async Task ExecuteAsync(CancellationToken stoppingToken) { await foreach(IEvent? message in messages.Incoming.ReadAllAsync(stoppingToken)) { 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); } } } }