25fb48ccf0
- Extract email template handling, rendering, and sending code into `Worker.Services` project. - Introduce `EmailTemplateService`, `EmailTemplateRenderingService`, and `SendEmailService`. - Simplify consumer logic by delegating to scoped services. - Update project dependencies and package references accordingly.
33 lines
1.1 KiB
C#
33 lines
1.1 KiB
C#
namespace HrynCo.NotificationService.Worker;
|
|
|
|
using HrynCo.NotificationService.Contracts.Messages;
|
|
using Hrynco.RabbitMq;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using Microsoft.Extensions.Options;
|
|
using HrynCo.NotificationService.Worker.Services.EmailProcessing;
|
|
|
|
public sealed class SendEmailConsumer : RabbitMqConsumerBase<SendEmailMessage, SendEmailMessageData>
|
|
{
|
|
private readonly IServiceScopeFactory _scopeFactory;
|
|
|
|
public SendEmailConsumer(
|
|
IOptionsMonitor<RabbitMqSettings> options,
|
|
IServiceScopeFactory scopeFactory,
|
|
ILogger<SendEmailConsumer> logger)
|
|
: base(options, logger)
|
|
{
|
|
_scopeFactory = scopeFactory;
|
|
}
|
|
|
|
private const string IncomingQueue = "notification.send-email";
|
|
|
|
protected override string QueueName => IncomingQueue;
|
|
|
|
protected override async Task HandleMessageAsync(SendEmailMessage message, CancellationToken cancellationToken)
|
|
{
|
|
using var scope = _scopeFactory.CreateScope();
|
|
var service = scope.ServiceProvider.GetRequiredService<ISendEmailService>();
|
|
await service.ProcessAsync(message, cancellationToken);
|
|
}
|
|
}
|