From cbe2acc37d97b096313c0d01717c998076573fcd Mon Sep 17 00:00:00 2001 From: TekH Date: Wed, 12 Nov 2025 15:32:06 +0100 Subject: [PATCH] feat(SendEmailBehavior): make SendEmailBehavior fully async and record history - Added ISender dependency to send history commands - Refactored SendFinalEmailToCreator and SendFinalEmailToReceivers to async - Log attachment inclusion for emails - Use Task.WhenAll for sending to multiple receivers --- .../Pdf/Behaviors/SendEmailBehavior.cs | 57 +++++++++++++++++-- 1 file changed, 51 insertions(+), 6 deletions(-) diff --git a/EnvelopeGenerator.Application/Pdf/Behaviors/SendEmailBehavior.cs b/EnvelopeGenerator.Application/Pdf/Behaviors/SendEmailBehavior.cs index 9d0e0fe0..ceea6563 100644 --- a/EnvelopeGenerator.Application/Pdf/Behaviors/SendEmailBehavior.cs +++ b/EnvelopeGenerator.Application/Pdf/Behaviors/SendEmailBehavior.cs @@ -1,4 +1,6 @@ -using EnvelopeGenerator.Domain.Constants; +using EnvelopeGenerator.Application.Histories.Commands; +using EnvelopeGenerator.Domain.Constants; +using EnvelopeGenerator.Domain.Entities; using MediatR; using Microsoft.Extensions.Logging; @@ -11,13 +13,17 @@ public class SendEmailBehavior : IPipelineBehavior { private readonly ILogger _logger; + private readonly ISender _sender; + /// /// /// /// - public SendEmailBehavior(ILogger logger) + /// + public SendEmailBehavior(ILogger logger, ISender sender) { _logger = logger; + _sender = sender; } /// @@ -37,25 +43,64 @@ public class SendEmailBehavior : IPipelineBehavior if (mailToCreator is not null && mailToCreator != (int)FinalEmailType.No) { _logger.LogDebug("Sending email to creator ..."); - SendFinalEmailToCreator(request.Envelope); // , pAttachment + await SendFinalEmailToCreatorAsync(request.Envelope, cancel); // , pAttachment } else { - _logger.LogWarning("No SendFinalEmailToCreator - mailToCreator [{mailToCreator}] <> [{FinalEmailType.No}] ", + _logger.LogWarning("No SendFinalEmailToCreatorAsync - mailToCreator [{mailToCreator}] <> [{FinalEmailType.No}] ", mailToCreator, FinalEmailType.No); } if (mailToReceivers != (int)FinalEmailType.No) { _logger.LogDebug("Sending emails to receivers..."); - SendFinalEmailToReceivers(request.Envelope); // , pAttachment + await SendFinalEmailToReceiversAsync(request.Envelope, cancel); // , pAttachment } else { - _logger.LogWarning("No SendFinalEmailToReceivers - mailToReceivers [{mailToReceivers}] <> [{FinalEmailType.No}] ", + _logger.LogWarning("No SendFinalEmailToReceiversAsync - mailToReceivers [{mailToReceivers}] <> [{FinalEmailType.No}] ", mailToReceivers, FinalEmailType.No); } return docResult; } + + private async Task SendFinalEmailToCreatorAsync(Envelope envelope, CancellationToken cancel) //, string pAttachment + { + bool oIncludeAttachment = SendFinalEmailWithAttachment(envelope.FinalEmailToCreator); + // string oAttachment = string.Empty; + + _logger.LogDebug("Attachment included: [{oIncludeAttachment}]", oIncludeAttachment); + if (oIncludeAttachment) + { + // oAttachment = pAttachment; + } + + await _sender.Send(new CreateHistoryCommand() + { + EnvelopeId = envelope.Id, + Status = EnvelopeStatus.MessageCompletionSent, + UserReference = envelope.User.Email, + }, cancel); + } + + private async Task SendFinalEmailToReceiversAsync(Envelope envelope, CancellationToken cancel) //, string pAttachment + { + bool oIncludeAttachment = SendFinalEmailWithAttachment(envelope.FinalEmailToReceivers); + // string oAttachment = string.Empty; + + _logger.LogDebug("Attachment included: [{oIncludeAttachment}]", oIncludeAttachment); + if (oIncludeAttachment) + { + // oAttachment = pAttachment; + } + + // TODO update CreateHistoryCommand to be able to create all records together + await Task.WhenAll(envelope.EnvelopeReceivers!.Select(receiver => _sender.Send(new CreateHistoryCommand() + { + EnvelopeId = envelope.Id, + Status = EnvelopeStatus.MessageCompletionSent, + UserReference = receiver.Receiver!.EmailAddress, + }, cancel))); + } } \ No newline at end of file