Files
hrynco-notification-service/HrynCo.NotificationService.Worker.Services/EmailProcessing/SendEmailMessageValidator.cs
T
agrynco 2757869176 feat: consume transactional email notifications
Add contract validation, SMTP delivery results, terminal failure context, neutral development seeding, and local Docker setup.

Ref: IT-1033
2026-08-04 12:32:28 +03:00

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.");
}
}