From d91ed70001cb3f8b130a8f23d46cd5db28e56be4 Mon Sep 17 00:00:00 2001 From: TekH Date: Fri, 24 Jul 2026 11:54:34 +0200 Subject: [PATCH] Refactor: Replace EmailSenderWorker with AsyncIniteWorker Removed EmailSenderWorker and its configuration, including EmailSenderWorkerConfiguration. Introduced AsyncIniteWorker as a replacement, simplifying the design by removing configuration-based toggling. - Deleted EmailSenderWorkerConfiguration.cs. - Removed EmailSenderWorker and its registration from Program.cs. - Registered AsyncIniteWorker in DependencyInjection.cs. - Renamed and refactored EmailSenderWorker to AsyncIniteWorker. - Updated namespace and removed unused configuration dependencies. --- .../EmailSenderWorkerConfiguration.cs | 11 --------- src/DigitalData.EmailProfiler.API/Program.cs | 8 ------- .../DependencyInjection.cs | 4 ++++ .../Services/Background/AsyncIniteWorker.cs} | 23 ++++++------------- 4 files changed, 11 insertions(+), 35 deletions(-) delete mode 100644 src/DigitalData.EmailProfiler.API/Configurations/EmailSenderWorkerConfiguration.cs rename src/{DigitalData.EmailProfiler.API/Workers/EmailSenderWorker.cs => DigitalData.EmailProfiler.Infrastructure/Services/Background/AsyncIniteWorker.cs} (61%) diff --git a/src/DigitalData.EmailProfiler.API/Configurations/EmailSenderWorkerConfiguration.cs b/src/DigitalData.EmailProfiler.API/Configurations/EmailSenderWorkerConfiguration.cs deleted file mode 100644 index 3aefedf..0000000 --- a/src/DigitalData.EmailProfiler.API/Configurations/EmailSenderWorkerConfiguration.cs +++ /dev/null @@ -1,11 +0,0 @@ -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 7c32478..de7c162 100644 --- a/src/DigitalData.EmailProfiler.API/Program.cs +++ b/src/DigitalData.EmailProfiler.API/Program.cs @@ -1,6 +1,4 @@ -using DigitalData.EmailProfiler.API.Configurations; using DigitalData.EmailProfiler.API.Middleware; -using DigitalData.EmailProfiler.API.Workers; using DigitalData.EmailProfiler.Application; using DigitalData.EmailProfiler.Application.Common.Dtos; using DigitalData.EmailProfiler.Infrastructure; @@ -43,16 +41,10 @@ try // Register Infrastructure layer (RabbitMQ, Repositories, etc.) builder.Services.AddInfrastructure(builder.Configuration); - // Register EmailSenderWorker configuration - builder.Services.Configure(builder.Configuration.GetSection(EmailSenderWorkerConfiguration.SectionName)); - // Register EmailAccount configuration (IOptions) builder.Services.Configure( builder.Configuration.GetSection("EmailAccount")); - // Register Background Workers - builder.Services.AddHostedService(); - builder.Services.AddControllers(); builder.Services.AddEndpointsApiExplorer(); diff --git a/src/DigitalData.EmailProfiler.Infrastructure/DependencyInjection.cs b/src/DigitalData.EmailProfiler.Infrastructure/DependencyInjection.cs index e0268f5..fc1b03c 100644 --- a/src/DigitalData.EmailProfiler.Infrastructure/DependencyInjection.cs +++ b/src/DigitalData.EmailProfiler.Infrastructure/DependencyInjection.cs @@ -2,6 +2,7 @@ using DigitalData.EmailProfiler.Application.Common.Interfaces; using DigitalData.EmailProfiler.Infrastructure.Messaging; using DigitalData.EmailProfiler.Infrastructure.Queue; using DigitalData.EmailProfiler.Infrastructure.Services; +using DigitalData.EmailProfiler.Infrastructure.Services.Background; using Microsoft.AspNetCore.DataProtection; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; @@ -42,6 +43,9 @@ public static class DependencyInjection .PersistKeysToFileSystem(new DirectoryInfo(@"C:\ProgramData\EmailService\Keys")) .SetApplicationName("EmailProfiler"); + // Register Background Workers + services.AddHostedService(); + return services; } } diff --git a/src/DigitalData.EmailProfiler.API/Workers/EmailSenderWorker.cs b/src/DigitalData.EmailProfiler.Infrastructure/Services/Background/AsyncIniteWorker.cs similarity index 61% rename from src/DigitalData.EmailProfiler.API/Workers/EmailSenderWorker.cs rename to src/DigitalData.EmailProfiler.Infrastructure/Services/Background/AsyncIniteWorker.cs index 5d8bd01..9f145a0 100644 --- a/src/DigitalData.EmailProfiler.API/Workers/EmailSenderWorker.cs +++ b/src/DigitalData.EmailProfiler.Infrastructure/Services/Background/AsyncIniteWorker.cs @@ -1,29 +1,20 @@ -using DigitalData.EmailProfiler.API.Configurations; using DigitalData.EmailProfiler.Application.Common.Interfaces; -using Microsoft.Extensions.Options; +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Logging; -namespace DigitalData.EmailProfiler.API.Workers; +namespace DigitalData.EmailProfiler.Infrastructure.Services.Background; /// /// Background worker that processes outgoing emails from RabbitMQ queue. /// Uses event-driven RabbitMQ consumer (push-based) instead of polling. /// NO database operations - email account configuration comes from appsettings. /// -public class EmailSenderWorker( +public class AsyncIniteWorker( IOutgoingEmailQueue EmailQueue, - ILogger Logger, - IOptions configuration) : BackgroundService + ILogger Logger) : BackgroundService { - private readonly EmailSenderWorkerConfiguration _config = configuration.Value; - protected override async Task ExecuteAsync(CancellationToken stoppingToken) { - if (!_config.Enabled) - { - Logger.LogInformation("EmailSenderWorker is disabled in configuration"); - return; - } - Logger.LogInformation("EmailSenderWorker started (event-driven RabbitMQ consumer)"); try @@ -32,7 +23,7 @@ public class EmailSenderWorker( await EmailQueue.InitAsync(stoppingToken); // Keep worker alive until cancellation - await Task.Delay(Timeout.Infinite, stoppingToken); + // await Task.Delay(Timeout.Infinite, stoppingToken); } catch (OperationCanceledException) { @@ -44,6 +35,6 @@ public class EmailSenderWorker( throw; } - Logger.LogInformation("EmailSenderWorker stopped"); + // Logger.LogInformation("EmailSenderWorker stopped"); } } \ No newline at end of file