using EnvelopeGenerator.Application.Histories.Commands; using EnvelopeGenerator.Domain.Constants; using EnvelopeGenerator.Domain.Entities; 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.Envelope, 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.Envelope, cancel); // , pAttachment } else { _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))); } }