feat: consume transactional email notifications
Add contract validation, SMTP delivery results, terminal failure context, neutral development seeding, and local Docker setup. Ref: IT-1033
This commit is contained in:
+36
@@ -0,0 +1,36 @@
|
||||
namespace HrynCo.NotificationService.Worker.Services.EmailProcessing;
|
||||
|
||||
using System.Net.Mail;
|
||||
using HrynCo.NotificationService.Contracts.Messages;
|
||||
|
||||
public static class SendEmailMessageValidator
|
||||
{
|
||||
public static void Validate(SendEmailMessage message)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(message);
|
||||
|
||||
if (message.CorrelationContext is null)
|
||||
throw new InvalidDataException("CorrelationContext is required.");
|
||||
if (string.IsNullOrWhiteSpace(message.CorrelationContext.CorrelationId))
|
||||
throw new InvalidDataException("CorrelationContext.CorrelationId is required.");
|
||||
if (message.Data is null)
|
||||
throw new InvalidDataException("Data is required.");
|
||||
|
||||
Require(message.Data.ServiceName, nameof(message.Data.ServiceName));
|
||||
Require(message.Data.TemplateKey, nameof(message.Data.TemplateKey));
|
||||
Require(message.Data.RecipientEmail, nameof(message.Data.RecipientEmail));
|
||||
Require(message.Data.RecipientName, nameof(message.Data.RecipientName));
|
||||
Require(message.Data.LanguageCode, nameof(message.Data.LanguageCode));
|
||||
|
||||
if (!MailAddress.TryCreate(message.Data.RecipientEmail, out _))
|
||||
throw new InvalidDataException("RecipientEmail is not a valid email address.");
|
||||
if (message.Data.Variables is null)
|
||||
throw new InvalidDataException("Variables is required.");
|
||||
}
|
||||
|
||||
private static void Require(string? value, string fieldName)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(value))
|
||||
throw new InvalidDataException($"{fieldName} is required.");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user