mirror of
https://github.com/aaronpo97/the-biergarten-app.git
synced 2026-10-14 17:54:42 +00:00
Replace shared email commands with MediatR notifications (#280)
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
using Features.Auth.Notifications;
|
||||
using Features.Emails.Services;
|
||||
using MediatR;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace Features.Emails.Notifications;
|
||||
|
||||
/// <summary>
|
||||
/// Handles <see cref="ConfirmationEmailResendRequestedNotification" />, the cross-slice notification
|
||||
/// published by Features.Users when a user requests a fresh confirmation link, by sending the resend
|
||||
/// confirmation email.
|
||||
/// </summary>
|
||||
public class ConfirmationEmailResendRequestedNotificationHandler(
|
||||
IEmailDispatcher emailDispatcher,
|
||||
ILogger<ConfirmationEmailResendRequestedNotificationHandler> logger
|
||||
) : INotificationHandler<ConfirmationEmailResendRequestedNotification>
|
||||
{
|
||||
/// <remarks>
|
||||
/// Delivery failures are logged and swallowed rather than rethrown, so that a broken mail server
|
||||
/// never fails the resend request that already succeeded.
|
||||
/// </remarks>
|
||||
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
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
using Features.Auth.Notifications;
|
||||
using Features.Emails.Services;
|
||||
using MediatR;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace Features.Emails.Notifications;
|
||||
|
||||
/// <summary>
|
||||
/// Handles <see cref="UserRegisteredNotification" />, the cross-slice notification published by
|
||||
/// Features.Users after a new user registers, by sending the registration confirmation email.
|
||||
/// </summary>
|
||||
public class UserRegisteredNotificationHandler(
|
||||
IEmailDispatcher emailDispatcher,
|
||||
ILogger<UserRegisteredNotificationHandler> logger
|
||||
) : INotificationHandler<UserRegisteredNotification>
|
||||
{
|
||||
/// <remarks>
|
||||
/// Delivery failures are logged and swallowed rather than rethrown, so that a broken mail server
|
||||
/// never fails the registration that already succeeded.
|
||||
/// </remarks>
|
||||
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
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user