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