2757869176
Add contract validation, SMTP delivery results, terminal failure context, neutral development seeding, and local Docker setup. Ref: IT-1033
37 lines
1.6 KiB
C#
37 lines
1.6 KiB
C#
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.");
|
|
}
|
|
}
|