1631786ce2
Add push contracts, provider delivery and channel diagnostics. Link email channels to services and document migration and validation. Ref: IT-1074
38 lines
1.6 KiB
C#
38 lines
1.6 KiB
C#
namespace HrynCo.NotificationService.Worker;
|
|
|
|
using HrynCo.NotificationService.Contracts.Messages;
|
|
using HrynCo.NotificationService.Worker.Services.Push;
|
|
using Hrynco.RabbitMq;
|
|
using Microsoft.Extensions.Options;
|
|
|
|
public sealed class SendPushConsumer(
|
|
IOptionsMonitor<RabbitMqSettings> options, IServiceScopeFactory scopes,
|
|
ILogger<SendPushConsumer> logger)
|
|
: RabbitMqConsumerBase<SendPushMessage, SendPushMessageData>(options, logger)
|
|
{
|
|
protected override string QueueName => "notification.send-push";
|
|
|
|
protected override bool TryValidateMessage(SendPushMessage message, RabbitMqMessageContext context, out string? validationError)
|
|
{
|
|
bool valid = SendPushDeliveryValidator.IsValid(message, context);
|
|
validationError = valid ? null : "Invalid push envelope.";
|
|
return valid;
|
|
}
|
|
|
|
protected override async Task HandleMessageAsync(SendPushMessage message, RabbitMqMessageContext context,
|
|
CancellationToken cancellationToken)
|
|
{
|
|
await using var scope = scopes.CreateAsyncScope();
|
|
await scope.ServiceProvider.GetRequiredService<PushDeliveryService>()
|
|
.ProcessAsync(Guid.Parse(context.MessageId!), message, cancellationToken);
|
|
}
|
|
|
|
protected override async Task HandleMessageRetriesExhaustedAsync(SendPushMessage message,
|
|
RabbitMqMessageContext context, Exception exception, CancellationToken cancellationToken)
|
|
{
|
|
await using var scope = scopes.CreateAsyncScope();
|
|
await scope.ServiceProvider.GetRequiredService<PushDeliveryService>()
|
|
.CompleteFailureAsync(Guid.Parse(context.MessageId!), message, cancellationToken);
|
|
}
|
|
}
|