From 0e53e8f726fadb6d718a43fb851daad0b4e067a0 Mon Sep 17 00:00:00 2001 From: TekH Date: Thu, 23 Jul 2026 15:01:33 +0200 Subject: [PATCH] Refactor EmailSenderWorker configuration handling Introduced a dedicated `EmailSenderWorkerConfiguration` class to centralize and simplify configuration management for the `EmailSenderWorker`. Updated `Program.cs` to use this class for dependency injection and removed the inline configuration logic from `EmailSenderWorker.cs`. Simplified the worker's constructor by leveraging `IOptions`. Removed the unused `MaxRetryCount` property from the configuration class and `appsettings.json`. Cleaned up `using` directives in `Program.cs` and `EmailSenderWorker.cs` to include the new namespace and remove redundant imports. These changes improve maintainability and align with best practices. --- .../EmailSenderWorkerConfiguration.cs | 11 ++++++++ src/DigitalData.EmailProfiler.API/Program.cs | 5 ++-- .../Workers/EmailSenderWorker.cs | 26 ++++--------------- .../appsettings.json | 3 +-- 4 files changed, 19 insertions(+), 26 deletions(-) create mode 100644 src/DigitalData.EmailProfiler.API/Configurations/EmailSenderWorkerConfiguration.cs diff --git a/src/DigitalData.EmailProfiler.API/Configurations/EmailSenderWorkerConfiguration.cs b/src/DigitalData.EmailProfiler.API/Configurations/EmailSenderWorkerConfiguration.cs new file mode 100644 index 0000000..3aefedf --- /dev/null +++ b/src/DigitalData.EmailProfiler.API/Configurations/EmailSenderWorkerConfiguration.cs @@ -0,0 +1,11 @@ +namespace DigitalData.EmailProfiler.API.Configurations; + +/// +/// Configuration for EmailSenderWorker +/// +public class EmailSenderWorkerConfiguration +{ + public const string SectionName = "Workers:EmailSender"; + + public bool Enabled { get; set; } = true; +} \ No newline at end of file diff --git a/src/DigitalData.EmailProfiler.API/Program.cs b/src/DigitalData.EmailProfiler.API/Program.cs index 6bbf8cf..7c32478 100644 --- a/src/DigitalData.EmailProfiler.API/Program.cs +++ b/src/DigitalData.EmailProfiler.API/Program.cs @@ -1,4 +1,4 @@ -using DigitalData.EmailProfiler.API; +using DigitalData.EmailProfiler.API.Configurations; using DigitalData.EmailProfiler.API.Middleware; using DigitalData.EmailProfiler.API.Workers; using DigitalData.EmailProfiler.Application; @@ -44,8 +44,7 @@ try builder.Services.AddInfrastructure(builder.Configuration); // Register EmailSenderWorker configuration - builder.Services.Configure( - builder.Configuration.GetSection(EmailSenderWorkerConfiguration.SectionName)); + builder.Services.Configure(builder.Configuration.GetSection(EmailSenderWorkerConfiguration.SectionName)); // Register EmailAccount configuration (IOptions) builder.Services.Configure( diff --git a/src/DigitalData.EmailProfiler.API/Workers/EmailSenderWorker.cs b/src/DigitalData.EmailProfiler.API/Workers/EmailSenderWorker.cs index cc7dc27..289cbc0 100644 --- a/src/DigitalData.EmailProfiler.API/Workers/EmailSenderWorker.cs +++ b/src/DigitalData.EmailProfiler.API/Workers/EmailSenderWorker.cs @@ -1,6 +1,8 @@ +using DigitalData.EmailProfiler.API.Configurations; using DigitalData.EmailProfiler.Application.Common.Events; using DigitalData.EmailProfiler.Application.Common.Interfaces; using DigitalData.EmailProfiler.Application.EmailSending.Commands; +using Microsoft.Extensions.Options; namespace DigitalData.EmailProfiler.API.Workers; @@ -13,11 +15,9 @@ public class EmailSenderWorker( IEmailQueue EmailQueue, IEmailService EmailService, ILogger Logger, - IConfiguration configuration) : BackgroundService + IOptions configuration) : BackgroundService { - private readonly EmailSenderWorkerConfiguration _config = - configuration.GetSection(EmailSenderWorkerConfiguration.SectionName) - .Get() ?? new EmailSenderWorkerConfiguration(); + private readonly EmailSenderWorkerConfiguration _config = configuration.Value; protected override async Task ExecuteAsync(CancellationToken stoppingToken) { @@ -80,20 +80,4 @@ public class EmailSenderWorker( throw; } } -} - -/// -/// Configuration for EmailSenderWorker -/// -public class EmailSenderWorkerConfiguration -{ - public const string SectionName = "Workers:EmailSender"; - - public bool Enabled { get; set; } = true; - - /// - /// Maximum retry attempts before moving to Dead Letter Queue - /// NOTE: Currently NOT used - all failed emails move directly to DLQ without retry - /// - public int MaxRetryCount { get; set; } = 3; -} +} \ No newline at end of file diff --git a/src/DigitalData.EmailProfiler.API/appsettings.json b/src/DigitalData.EmailProfiler.API/appsettings.json index 8f9d3bf..8a90591 100644 --- a/src/DigitalData.EmailProfiler.API/appsettings.json +++ b/src/DigitalData.EmailProfiler.API/appsettings.json @@ -13,8 +13,7 @@ "AllowedHosts": "*", "Workers": { "EmailSender": { - "Enabled": true, - "MaxRetryCount": 3 + "Enabled": true } }, "LuckyPennySoftLicenseKey": "eyJhbGciOiJSUzI1NiIsImtpZCI6Ikx1Y2t5UGVubnlTb2Z0d2FyZUxpY2Vuc2VLZXkvYmJiMTNhY2I1OTkwNGQ4OWI0Y2IxYzg1ZjA4OGNjZjkiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2x1Y2t5cGVubnlzb2Z0d2FyZS5jb20iLCJhdWQiOiJMdWNreVBlbm55U29mdHdhcmUiLCJleHAiOiIxODE2MTI4MDAwIiwiaWF0IjoiMTc4NDYyNDU1NyIsImFjY291bnRfaWQiOiIwMTk4M2M1OWU0YjM3MjhlYmZkMzEwM2MyYTQ4NmU4NSIsImN1c3RvbWVyX2lkIjoiMDE5ODNjNTllNGIzNzI4ZWJmZDMxMDNjMmE0ODZlODUiLCJzdWJfaWQiOiItIiwiZWRpdGlvbiI6IjAiLCJ0eXBlIjoiMiJ9.IUUO926m9crYGYxMjjKD_n9BnUm-EDyjFIn0YmMUCo7C-QTwvB8WhXP8veTSFsBq-leIIDJ4jyl7Pgc_7ciwg1XhUSIs4mkQroEUaSFCGOxw7Pi41WM8MK5YFSaqLTYYXec9zxgiJbGzABbh3CHTSup3okGnVm_CMoPEs91l2c0A6N1JyZy74urd_tF0KGVKf0MOvzdlQIWLQ8o73S4pTv2N-F6UlzI0fdMtTHMLNNQyr0NdWdnuBk_jMBXO-gy5RE_oCRfMTTYRX2n3XLK6pTfXE0Ct338o9F5sH8Ph2lTXSu56cpdsfZOQZGqCH0LoFp1Dd7RJgIgNmBiTGfvDnA"