Send notifications via IMessagingServiceClient and PublishEmailViaSmtpCommand instead of the static EmailSender. The sender address now comes from NotificationOptions and attachments are added through the command builder. Rename the Notify parameter to receiverEmail so the call site contract is explicit.
48 lines
2.2 KiB
C#
48 lines
2.2 KiB
C#
using DigitalData.Core.Abstraction.Application.Repository;
|
|
using DigitalData.MessagingService.Application.Common.Dto;
|
|
using DigitalData.MessagingService.Application.Common.Interfaces;
|
|
using DigitalData.MessagingService.Application.EmailSending.Commands;
|
|
using DigitalData.MessagingService.Client;
|
|
using DigitalData.MessagingService.Domain.Entities;
|
|
using EnvelopeGenerator.Application.Common.Interfaces.Services.Notification;
|
|
using EnvelopeGenerator.Domain.Constants;
|
|
using EnvelopeGenerator.Domain.Entities;
|
|
using EnvelopeGenerator.Domain.Exceptions;
|
|
using EnvelopeGenerator.Infrastructure.Notification.Configuration;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using Microsoft.Extensions.Options;
|
|
|
|
namespace EnvelopeGenerator.Infrastructure.Notification;
|
|
|
|
public class EnvelopeNotificationService(IRepository<EmailTemplate> TempRepo, IMessagingServiceClient MsgClient, IOptions<NotificationOptions> ntfOpt) : IEnvelopeNotificationService
|
|
{
|
|
private readonly NotificationOptions NtfOpt = ntfOpt.Value;
|
|
|
|
private async Task<EmailTemplate> GetTemplateAsync(EmailTemplateType templateType, CancellationToken cancel = default)
|
|
{
|
|
return await TempRepo.Where(t => t.Name == templateType.ToString()).FirstOrDefaultAsync(cancel)
|
|
?? throw new DataIntegrityException($"{templateType} email template not found");
|
|
}
|
|
|
|
public async Task Notify<TEnvelopeNotificationBase>(string receiverEmail, TEnvelopeNotificationBase notification, CancellationToken cancel = default)
|
|
where TEnvelopeNotificationBase : EnvelopeNotificationBase
|
|
{
|
|
var template = await GetTemplateAsync(notification.GetTemplateType(), cancel);
|
|
|
|
// create email command
|
|
var mail = new PublishEmailViaSmtpCommand()
|
|
{
|
|
Body = template.Body.ReplacePlaceholders(notification),
|
|
Subject = template.Subject.ReplacePlaceholders(notification),
|
|
Recipients = [receiverEmail],
|
|
Sender = NtfOpt.SenderEmail.ToSender(),
|
|
IsHtml = true
|
|
};
|
|
|
|
// add attachments if any
|
|
if(notification.Attachments?.Any() ?? false)
|
|
mail = mail.WithAttachments(notification.Attachments.ToEmailAttachmentDto());
|
|
|
|
await MsgClient.SendAsync(mail, cancel);
|
|
}
|
|
} |