From 15d45733214cf869af606adddfee14b7a7a3d19d Mon Sep 17 00:00:00 2001 From: TekH Date: Wed, 25 Feb 2026 11:52:31 +0100 Subject: [PATCH] =?UTF-8?q?=C3=9Cbersetzendie=20FinalizeDocumentJob-Funkti?= =?UTF-8?q?on=20des=20EnvelopeGenerator.Service-Projekts=20in=20C#=20und?= =?UTF-8?q?=20kopieren=20sie.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EnvelopeGenerator.ServiceHost.csproj | 1 - .../Extensions/ServiceCollectionExtensions.cs | 16 ++++++ .../Jobs/FinalizeDocumentJobOptions.cs | 11 ++++ .../Jobs/FinalizeDocumentJobRunner.cs | 57 +++++++++++++++++++ .../Jobs/JobDataKeys.cs | 9 +++ EnvelopeGenerator.ServiceHost/Program.cs | 2 + EnvelopeGenerator.ServiceHost/Worker.cs | 6 +- 7 files changed, 100 insertions(+), 2 deletions(-) create mode 100644 EnvelopeGenerator.ServiceHost/Extensions/ServiceCollectionExtensions.cs create mode 100644 EnvelopeGenerator.ServiceHost/Jobs/FinalizeDocumentJobOptions.cs create mode 100644 EnvelopeGenerator.ServiceHost/Jobs/FinalizeDocumentJobRunner.cs create mode 100644 EnvelopeGenerator.ServiceHost/Jobs/JobDataKeys.cs diff --git a/EnvelopeGenerator.ServiceHost/EnvelopeGenerator.ServiceHost.csproj b/EnvelopeGenerator.ServiceHost/EnvelopeGenerator.ServiceHost.csproj index f861646b..c330ae92 100644 --- a/EnvelopeGenerator.ServiceHost/EnvelopeGenerator.ServiceHost.csproj +++ b/EnvelopeGenerator.ServiceHost/EnvelopeGenerator.ServiceHost.csproj @@ -27,7 +27,6 @@ - diff --git a/EnvelopeGenerator.ServiceHost/Extensions/ServiceCollectionExtensions.cs b/EnvelopeGenerator.ServiceHost/Extensions/ServiceCollectionExtensions.cs new file mode 100644 index 00000000..036e3e27 --- /dev/null +++ b/EnvelopeGenerator.ServiceHost/Extensions/ServiceCollectionExtensions.cs @@ -0,0 +1,16 @@ +using EnvelopeGenerator.ServiceHost.Jobs; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; + +namespace EnvelopeGenerator.ServiceHost.Extensions; + +public static class ServiceCollectionExtensions +{ + public static IServiceCollection AddFinalizeDocumentJob(this IServiceCollection services, IConfiguration configuration) + { + services.Configure(configuration.GetSection("FinalizeDocumentJob")); + services.AddSingleton(); + services.AddSingleton(); + return services; + } +} diff --git a/EnvelopeGenerator.ServiceHost/Jobs/FinalizeDocumentJobOptions.cs b/EnvelopeGenerator.ServiceHost/Jobs/FinalizeDocumentJobOptions.cs new file mode 100644 index 00000000..9b71e19c --- /dev/null +++ b/EnvelopeGenerator.ServiceHost/Jobs/FinalizeDocumentJobOptions.cs @@ -0,0 +1,11 @@ +using EnvelopeGenerator.ServiceHost.Jobs.FinalizeDocument; + +namespace EnvelopeGenerator.ServiceHost.Jobs; + +public class FinalizeDocumentJobOptions +{ + public string ConnectionString { get; set; } = string.Empty; + public string GdPictureLicenseKey { get; set; } = string.Empty; + public bool Debug { get; set; } + public PDFBurnerParams PdfBurnerParams { get; set; } = new(); +} diff --git a/EnvelopeGenerator.ServiceHost/Jobs/FinalizeDocumentJobRunner.cs b/EnvelopeGenerator.ServiceHost/Jobs/FinalizeDocumentJobRunner.cs new file mode 100644 index 00000000..42fa2fb5 --- /dev/null +++ b/EnvelopeGenerator.ServiceHost/Jobs/FinalizeDocumentJobRunner.cs @@ -0,0 +1,57 @@ +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/Jobs/JobDataKeys.cs b/EnvelopeGenerator.ServiceHost/Jobs/JobDataKeys.cs new file mode 100644 index 00000000..44139cc2 --- /dev/null +++ b/EnvelopeGenerator.ServiceHost/Jobs/JobDataKeys.cs @@ -0,0 +1,9 @@ +namespace EnvelopeGenerator.ServiceHost.Jobs; + +public static class JobDataKeys +{ + public const string GdPicture = "GDPICTURE"; + public const string LogConfig = "LOGCONFIG"; + public const string Database = "DATABASE"; + public const string PdfBurnerParams = "PDF_BURNER_PARAMS"; +} diff --git a/EnvelopeGenerator.ServiceHost/Program.cs b/EnvelopeGenerator.ServiceHost/Program.cs index 1b603678..8941a80f 100644 --- a/EnvelopeGenerator.ServiceHost/Program.cs +++ b/EnvelopeGenerator.ServiceHost/Program.cs @@ -1,10 +1,12 @@ using EnvelopeGenerator.ServiceHost; +using EnvelopeGenerator.ServiceHost.Extensions; var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllers(); +builder.Services.AddFinalizeDocumentJob(builder.Configuration); builder.Services.AddHostedService(); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle diff --git a/EnvelopeGenerator.ServiceHost/Worker.cs b/EnvelopeGenerator.ServiceHost/Worker.cs index f15c02ba..00e8fae8 100644 --- a/EnvelopeGenerator.ServiceHost/Worker.cs +++ b/EnvelopeGenerator.ServiceHost/Worker.cs @@ -4,11 +4,13 @@ public class Worker : BackgroundService { private readonly ILogger _logger; private readonly int _delayMilliseconds; + private readonly IFinalizeDocumentJobRunner _jobRunner; - public Worker(ILogger logger, IConfiguration configuration) + public Worker(ILogger logger, IConfiguration configuration, IFinalizeDocumentJobRunner jobRunner) { _logger = logger; _delayMilliseconds = Math.Max(1, configuration.GetValue("Worker:DelayMilliseconds", 1000)); + _jobRunner = jobRunner; } protected override async Task ExecuteAsync(CancellationToken stoppingToken) @@ -19,6 +21,8 @@ public class Worker : BackgroundService { _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now); } + + await _jobRunner.RunAsync(stoppingToken); await Task.Delay(_delayMilliseconds, stoppingToken); } }