From 45b715ed748e9eda12241264e92317cc74b41073 Mon Sep 17 00:00:00 2001 From: TekH Date: Wed, 25 Feb 2026 13:29:00 +0100 Subject: [PATCH] Refactor job execution to remove Quartz and job runner Simplify FinalizeDocumentJob execution by removing Quartz dependencies and the IFinalizeDocumentJobRunner abstraction. The job now uses an ExecuteAsync method with direct access to configuration and options via dependency injection. Worker is updated to call the job directly, and service registration is streamlined. This improves clarity and integration with .NET DI. --- .../Extensions/ServiceCollectionExtensions.cs | 1 - .../Jobs/FinalizeDocumentJob.cs | 12 ++-- .../Jobs/FinalizeDocumentJobRunner.cs | 57 ------------------- EnvelopeGenerator.ServiceHost/Worker.cs | 10 ++-- 4 files changed, 12 insertions(+), 68 deletions(-) delete mode 100644 EnvelopeGenerator.ServiceHost/Jobs/FinalizeDocumentJobRunner.cs diff --git a/EnvelopeGenerator.ServiceHost/Extensions/ServiceCollectionExtensions.cs b/EnvelopeGenerator.ServiceHost/Extensions/ServiceCollectionExtensions.cs index 0f9d053f..b5fda94c 100644 --- a/EnvelopeGenerator.ServiceHost/Extensions/ServiceCollectionExtensions.cs +++ b/EnvelopeGenerator.ServiceHost/Extensions/ServiceCollectionExtensions.cs @@ -10,7 +10,6 @@ public static class ServiceCollectionExtensions { services.Configure(configuration.GetSection(nameof(WorkerOptions))); services.AddSingleton(); - services.AddSingleton(); return services; } } diff --git a/EnvelopeGenerator.ServiceHost/Jobs/FinalizeDocumentJob.cs b/EnvelopeGenerator.ServiceHost/Jobs/FinalizeDocumentJob.cs index 7dfa7b55..9dc58d78 100644 --- a/EnvelopeGenerator.ServiceHost/Jobs/FinalizeDocumentJob.cs +++ b/EnvelopeGenerator.ServiceHost/Jobs/FinalizeDocumentJob.cs @@ -49,14 +49,14 @@ public class FinalizeDocumentJob(IOptions options, IConfiguration public byte[]? DocAsByte { get; set; } } - public Task Execute(IJobExecutionContext context) + public Task ExecuteAsync(CancellationToken cancellationToken = default) { - var gdPictureKey = (string)context.MergedJobDataMap[Value.GDPICTURE]; - _logConfig = (LogConfig)context.MergedJobDataMap[Value.LOGCONFIG]; + var gdPictureKey = _options.GdPictureLicenseKey; + _logConfig = new LogConfig { Debug = _options.Debug }; _logger = _logConfig.GetLogger(); _tempFiles = new TempFiles(_logConfig); _tempFiles.Create(); - var jobId = context.JobDetail.Key; + var jobId = typeof(FinalizeDocumentJob).FullName; _logger.Debug("Starting job {0}", jobId); try @@ -66,7 +66,7 @@ public class FinalizeDocumentJob(IOptions options, IConfiguration _licenseManager.RegisterKEY(gdPictureKey); _logger.Debug("Loading Database.."); - var connectionString = (string)context.MergedJobDataMap[Value.DATABASE]; + var connectionString = config.GetConnectionString("Default") ?? throw new InvalidOperationException("Connection string 'Default' not found."); _databaseConnectionString = MSSQLServer.DecryptConnectionString(connectionString); _database = new MSSQLServer(_logConfig, _databaseConnectionString); @@ -81,7 +81,7 @@ public class FinalizeDocumentJob(IOptions options, IConfiguration InitializeServices(state); _logger.Debug("Loading PDFBurner.."); - var pdfBurnerParams = (PDFBurnerParams)context.MergedJobDataMap[Value.PDF_BURNER_PARAMS]; + var pdfBurnerParams = _options.PdfBurnerParams; _pdfBurner = new PDFBurner(_logConfig, gdPictureKey, pdfBurnerParams, _databaseConnectionString); _logger.Debug("Loading PDFMerger.."); diff --git a/EnvelopeGenerator.ServiceHost/Jobs/FinalizeDocumentJobRunner.cs b/EnvelopeGenerator.ServiceHost/Jobs/FinalizeDocumentJobRunner.cs deleted file mode 100644 index 42fa2fb5..00000000 --- a/EnvelopeGenerator.ServiceHost/Jobs/FinalizeDocumentJobRunner.cs +++ /dev/null @@ -1,57 +0,0 @@ -using DigitalData.Modules.Logging; -using EnvelopeGenerator.ServiceHost.Jobs.FinalizeDocument; -using Microsoft.Extensions.Options; -using Quartz; - -namespace EnvelopeGenerator.ServiceHost.Jobs; - -public interface IFinalizeDocumentJobRunner -{ - Task RunAsync(CancellationToken cancellationToken); -} - -public class FinalizeDocumentJobRunner : IFinalizeDocumentJobRunner -{ - private readonly FinalizeDocumentJob _job; - private readonly IOptions _options; - private readonly IConfiguration _configuration; - private readonly ILogger _logger; - - public FinalizeDocumentJobRunner( - FinalizeDocumentJob job, - IOptions options, - IConfiguration configuration, - ILogger logger) - { - _job = job; - _options = options; - _configuration = configuration; - _logger = logger; - } - - public Task RunAsync(CancellationToken cancellationToken) - { - var options = _options.Value; - var connectionString = options.ConnectionString; - if (string.IsNullOrWhiteSpace(connectionString)) - { - connectionString = _configuration.GetConnectionString("Default") ?? string.Empty; - } - - if (string.IsNullOrWhiteSpace(connectionString)) - { - _logger.LogWarning("FinalizeDocumentJob skipped: missing connection string."); - return Task.CompletedTask; - } - - var dataMap = new JobDataMap - { - { JobDataKeys.GdPicture, options.GdPictureLicenseKey }, - { JobDataKeys.Database, connectionString }, - { JobDataKeys.LogConfig, new LogConfig { Debug = options.Debug } }, - { JobDataKeys.PdfBurnerParams, options.PdfBurnerParams } - }; - - return _job.Execute(dataMap, cancellationToken); - } -} diff --git a/EnvelopeGenerator.ServiceHost/Worker.cs b/EnvelopeGenerator.ServiceHost/Worker.cs index 00e8fae8..ebea843a 100644 --- a/EnvelopeGenerator.ServiceHost/Worker.cs +++ b/EnvelopeGenerator.ServiceHost/Worker.cs @@ -1,16 +1,18 @@ +using EnvelopeGenerator.ServiceHost.Jobs; + namespace EnvelopeGenerator.ServiceHost; public class Worker : BackgroundService { private readonly ILogger _logger; private readonly int _delayMilliseconds; - private readonly IFinalizeDocumentJobRunner _jobRunner; + private readonly FinalizeDocumentJob _finalizeDocumentJob; - public Worker(ILogger logger, IConfiguration configuration, IFinalizeDocumentJobRunner jobRunner) + public Worker(ILogger logger, IConfiguration configuration, FinalizeDocumentJob finalizeDocumentJob) { _logger = logger; _delayMilliseconds = Math.Max(1, configuration.GetValue("Worker:DelayMilliseconds", 1000)); - _jobRunner = jobRunner; + _finalizeDocumentJob = finalizeDocumentJob; } protected override async Task ExecuteAsync(CancellationToken stoppingToken) @@ -22,7 +24,7 @@ public class Worker : BackgroundService _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now); } - await _jobRunner.RunAsync(stoppingToken); + await _finalizeDocumentJob.ExecuteAsync(stoppingToken); await Task.Delay(_delayMilliseconds, stoppingToken); } }