108 lines
3.8 KiB
C#
108 lines
3.8 KiB
C#
using EnvelopeGenerator.Application.Histories.Commands;
|
|
using EnvelopeGenerator.Domain.Constants;
|
|
using EnvelopeGenerator.Domain.Entities;
|
|
using MediatR;
|
|
using Microsoft.Extensions.Logging;
|
|
|
|
namespace EnvelopeGenerator.Application.Pdf.Behaviors;
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public class SendEmailBehavior : IPipelineBehavior<BurnPdfCommand, byte[]>
|
|
{
|
|
private readonly ILogger<SendEmailBehavior> _logger;
|
|
|
|
private readonly ISender _sender;
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="logger"></param>
|
|
/// <param name="sender"></param>
|
|
public SendEmailBehavior(ILogger<SendEmailBehavior> logger, ISender sender)
|
|
{
|
|
_logger = logger;
|
|
_sender = sender;
|
|
}
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="request"></param>
|
|
/// <param name="next"></param>
|
|
/// <param name="cancel"></param>
|
|
/// <returns></returns>
|
|
public async Task<byte[]> Handle(BurnPdfCommand request, RequestHandlerDelegate<byte[]> 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(request.Envelope!.FinalEmailToCreator);
|
|
// string oAttachment = string.Empty;
|
|
|
|
_logger.LogDebug("Attachment included: [{oIncludeAttachment}]", oIncludeAttachment);
|
|
if (oIncludeAttachment)
|
|
{
|
|
// oAttachment = pAttachment;
|
|
}
|
|
|
|
if (!request.Debug)
|
|
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(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
|
|
if (!request.Debug)
|
|
await Task.WhenAll(request.Envelope!.EnvelopeReceivers!.Select(receiver => _sender.Send(new CreateHistoryCommand()
|
|
{
|
|
EnvelopeId = request.Envelope!.Id,
|
|
Status = EnvelopeStatus.MessageCompletionSent,
|
|
UserReference = receiver.Receiver!.EmailAddress,
|
|
}, cancel)));
|
|
}
|
|
} |