using EnvelopeGenerator.Application.Histories.Commands; using EnvelopeGenerator.Domain.Constants; using MediatR; using Microsoft.Extensions.Logging; namespace EnvelopeGenerator.Application.Pdf.Behaviors; /// /// /// public class SendEmailBehavior : IPipelineBehavior { private readonly ILogger _logger; private readonly ISender _sender; /// /// /// /// /// public SendEmailBehavior(ILogger logger, ISender sender) { _logger = logger; _sender = sender; } /// /// /// /// /// /// /// public async Task Handle(BurnPdfCommand request, RequestHandlerDelegate next, CancellationToken cancel) { var docResult = await next(cancel); var mailToCreator = request.Envelope!.FinalEmailToCreator; var mailToReceivers = request.Envelope.FinalEmailToReceivers; if (mailToCreator is not null && mailToCreator != (int)FinalEmailType.No) { _logger.LogDebug("Sending email to creator ..."); await SendFinalEmailToCreatorAsync(request, cancel); // , pAttachment } else { _logger.LogWarning("No SendFinalEmailToCreatorAsync - mailToCreator [{mailToCreator}] <> [{FinalEmailType.No}] ", mailToCreator, FinalEmailType.No); } if (mailToReceivers != (int)FinalEmailType.No) { _logger.LogDebug("Sending emails to receivers..."); await SendFinalEmailToReceiversAsync(request, cancel); // , pAttachment } else { _logger.LogWarning("No SendFinalEmailToReceiversAsync - mailToReceivers [{mailToReceivers}] <> [{FinalEmailType.No}] ", mailToReceivers, FinalEmailType.No); } return docResult; } private async Task SendFinalEmailToCreatorAsync(BurnPdfCommand request, CancellationToken cancel) //, string pAttachment { bool oIncludeAttachment = SendFinalEmailWithAttachment((int)request.Envelope!.FinalEmailToCreator!); // string oAttachment = string.Empty; _logger.LogDebug("Attachment included: [{oIncludeAttachment}]", oIncludeAttachment); if (oIncludeAttachment) { // oAttachment = pAttachment; } await _sender.Send(new CreateHistoryCommand() { EnvelopeId = request.Envelope!.Id, Status = EnvelopeStatus.MessageCompletionSent, UserReference = request.Envelope.User.Email, }, cancel); } private async Task SendFinalEmailToReceiversAsync(BurnPdfCommand request, CancellationToken cancel) //, string pAttachment { bool oIncludeAttachment = SendFinalEmailWithAttachment((int)request.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 foreach (var receiver in request.Envelope.EnvelopeReceivers!) { if (receiver.Receiver?.EmailAddress != null) { await _sender.Send(new CreateHistoryCommand() { EnvelopeId = request.Envelope.Id, Status = EnvelopeStatus.MessageCompletionSent, UserReference = receiver.Receiver.EmailAddress, }, cancel); } } } private static bool SendFinalEmailWithAttachment(int type) => type == (int)FinalEmailType.YesWithAttachment; }