using Features.Auth.Notifications;
using Features.Emails.Services;
using MediatR;
using Microsoft.Extensions.Logging;
namespace Features.Emails.Notifications;
///
/// Handles , the cross-slice notification
/// published by Features.Users when a user requests a fresh confirmation link, by sending the resend
/// confirmation email.
///
public class ConfirmationEmailResendRequestedNotificationHandler(
IEmailDispatcher emailDispatcher,
ILogger logger
) : INotificationHandler
{
///
/// Delivery failures are logged and swallowed rather than rethrown, so that a broken mail server
/// never fails the resend request that already succeeded.
///
public async Task Handle(
ConfirmationEmailResendRequestedNotification notification,
CancellationToken cancellationToken
)
{
try
{
await emailDispatcher.SendResendConfirmationEmailAsync(
notification.FirstName,
notification.Email,
notification.ConfirmationToken
);
}
catch (Exception ex)
{
logger.LogError(
ex,
"Failed to send resend confirmation email to user {UserId}",
notification.UserId
);
}
}
}