From 35dd2e8e07074b298fed75c454d3fe9d3bc46f08 Mon Sep 17 00:00:00 2001 From: TekH Date: Wed, 12 Nov 2025 16:14:32 +0100 Subject: [PATCH] refactor(email): replace Task.WhenAll with foreach in SendEmailBehavior Changed the SendFinalEmailToReceiversAsync method to use a sequential `foreach` loop instead of `Task.WhenAll` for sending history commands. Added a null check for receiver emails to prevent potential exceptions. --- .../Pdf/Behaviors/SendEmailBehavior.cs | 16 +++++++++++----- .../Pdf/BurnPdfCommand.cs | 2 ++ .../appsettings.Development.json | 2 +- EnvelopeGenerator.Finalizer/appsettings.Job.json | 7 +++++-- 4 files changed, 19 insertions(+), 8 deletions(-) diff --git a/EnvelopeGenerator.Application/Pdf/Behaviors/SendEmailBehavior.cs b/EnvelopeGenerator.Application/Pdf/Behaviors/SendEmailBehavior.cs index 42948608..7990426a 100644 --- a/EnvelopeGenerator.Application/Pdf/Behaviors/SendEmailBehavior.cs +++ b/EnvelopeGenerator.Application/Pdf/Behaviors/SendEmailBehavior.cs @@ -95,12 +95,18 @@ public class SendEmailBehavior : IPipelineBehavior } // TODO update CreateHistoryCommand to be able to create all records together - await Task.WhenAll(request.Envelope!.EnvelopeReceivers!.Select(receiver => _sender.Send(new CreateHistoryCommand() + foreach (var receiver in request.Envelope.EnvelopeReceivers!) { - EnvelopeId = request.Envelope!.Id, - Status = EnvelopeStatus.MessageCompletionSent, - UserReference = receiver.Receiver!.EmailAddress, - }, cancel))); + 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; diff --git a/EnvelopeGenerator.Application/Pdf/BurnPdfCommand.cs b/EnvelopeGenerator.Application/Pdf/BurnPdfCommand.cs index c50280db..fc05fac0 100644 --- a/EnvelopeGenerator.Application/Pdf/BurnPdfCommand.cs +++ b/EnvelopeGenerator.Application/Pdf/BurnPdfCommand.cs @@ -110,6 +110,8 @@ public class BurnPdfCommandHandler : IRequestHandler request.Envelope = await envQuery .Include(env => env.Documents!).ThenInclude(doc => doc.Elements!).ThenInclude(element => element.Annotations) + .Include(env => env.User) + .Include(env => env.EnvelopeReceivers!).ThenInclude(envRcv => envRcv.Receiver) .FirstOrDefaultAsync(cancel) ?? throw new BadRequestException($"Envelope could not be found. Request details:\n" + request.ToJson(Format.Json.ForDiagnostics)); diff --git a/EnvelopeGenerator.Finalizer/appsettings.Development.json b/EnvelopeGenerator.Finalizer/appsettings.Development.json index 7589f277..3e6a3561 100644 --- a/EnvelopeGenerator.Finalizer/appsettings.Development.json +++ b/EnvelopeGenerator.Finalizer/appsettings.Development.json @@ -1,7 +1,7 @@ { "Logging": { "LogLevel": { - "Default": "Information", + "Default": "Error", "Microsoft.Hosting.Lifetime": "Information" } }, diff --git a/EnvelopeGenerator.Finalizer/appsettings.Job.json b/EnvelopeGenerator.Finalizer/appsettings.Job.json index 45e1fd34..19d5fecd 100644 --- a/EnvelopeGenerator.Finalizer/appsettings.Job.json +++ b/EnvelopeGenerator.Finalizer/appsettings.Job.json @@ -1,8 +1,11 @@ { "FinishEnvelopeJob": { - "CronExpression": "* * * * * ?" + "CronExpression": "0 0/1 * 1/1 * ? *" }, "EnvelopeTaskApiJob": { - "CronExpression": "* * * * * ?" + "CronExpression": "0 0/1 * 1/1 * ? *" + } + "Expressions": { + "PerSec": "* * * * * ?" } } \ No newline at end of file