From 99d8593c49a8a78ed95cae8e3c357c5da38ae53d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Zieli=C5=84ski?= Date: Sun, 8 Jun 2025 10:56:20 +0200 Subject: [PATCH] Naming fix --- .../Services/JobQueueProcessor.cs | 38 ++++++++++-------- ...1R1Processor.cs => MorskaT1R1Processor.cs} | 8 ++-- ...1R3Processor.cs => MorskaT1R3Processor.cs} | 8 ++-- ...ceCopySelectedCodesProcessor-TO_REMOVE.cs} | 8 ++-- ...tedCodesYearSummaryProcessor-TO_REMOVE.cs} | 8 ++-- ...=> MorskaT3MultiSourceSummaryProcessor.cs} | 8 ++-- ...orskaT3MultiSourceYearSummaryProcessor.cs} | 8 ++-- ... => MorskaT3SourceYearSummaryProcessor.cs} | 8 ++-- ...4R2Processor.cs => MorskaT4R2Processor.cs} | 8 ++-- ...or.cs => MorskaT4SingleSourceProcessor.cs} | 8 ++-- ...ssor.cs => MorskaT5LastValuesProcessor.cs} | 8 ++-- .../Controllers/LayersController.cs | 39 ++++++++++--------- src/Backend/DiunaBI.WebAPI/Program.cs | 3 +- tools/http-tests/AutoImport.http | 2 +- 14 files changed, 84 insertions(+), 78 deletions(-) rename src/Backend/DiunaBI.Plugins.Morska/Processors/{T1R1Processor.cs => MorskaT1R1Processor.cs} (98%) rename src/Backend/DiunaBI.Plugins.Morska/Processors/{T1R3Processor.cs => MorskaT1R3Processor.cs} (98%) rename src/Backend/DiunaBI.Plugins.Morska/Processors/{T3MultiSourceCopySelectedCodesProcessor-TO_REMOVE.cs => MorskaT3MultiSourceCopySelectedCodesProcessor-TO_REMOVE.cs} (97%) rename src/Backend/DiunaBI.Plugins.Morska/Processors/{T3MultiSourceCopySelectedCodesYearSummaryProcessor-TO_REMOVE.cs => MorskaT3MultiSourceCopySelectedCodesYearSummaryProcessor-TO_REMOVE.cs} (96%) rename src/Backend/DiunaBI.Plugins.Morska/Processors/{T3MultiSourceSummaryProcessor.cs => MorskaT3MultiSourceSummaryProcessor.cs} (98%) rename src/Backend/DiunaBI.Plugins.Morska/Processors/{T3MultiSourceYearSummaryProcessor.cs => MorskaT3MultiSourceYearSummaryProcessor.cs} (97%) rename src/Backend/DiunaBI.Plugins.Morska/Processors/{T3SourceYearSummaryProcessor.cs => MorskaT3SourceYearSummaryProcessor.cs} (97%) rename src/Backend/DiunaBI.Plugins.Morska/Processors/{T4R2Processor.cs => MorskaT4R2Processor.cs} (99%) rename src/Backend/DiunaBI.Plugins.Morska/Processors/{T4SingleSourceProcessor.cs => MorskaT4SingleSourceProcessor.cs} (97%) rename src/Backend/DiunaBI.Plugins.Morska/Processors/{T5LastValuesProcessor.cs => MorskaT5LastValuesProcessor.cs} (98%) diff --git a/src/Backend/DiunaBI.Core/Services/JobQueueProcessor.cs b/src/Backend/DiunaBI.Core/Services/JobQueueProcessor.cs index 624441c..2ea61c5 100644 --- a/src/Backend/DiunaBI.Core/Services/JobQueueProcessor.cs +++ b/src/Backend/DiunaBI.Core/Services/JobQueueProcessor.cs @@ -15,17 +15,20 @@ namespace DiunaBI.Core.Services; public class JobQueueProcessor : BackgroundService { - private readonly IServiceProvider _serviceProvider; + private readonly IServiceScopeFactory _scopeFactory; // ✅ GOOD - używa scope factory private readonly ILogger _logger; - private readonly ManualResetEventSlim _processSignal; + private readonly ManualResetEventSlim _processSignal = new(false); + + // ❌ USUŃ DIRECT INJECTION scoped services: + // private readonly IJobQueueService _queueService; + // private readonly AppDbContext _db; public JobQueueProcessor( - IServiceProvider serviceProvider, + IServiceScopeFactory scopeFactory, // ✅ GOOD - inject scope factory ILogger logger) { - _serviceProvider = serviceProvider; + _scopeFactory = scopeFactory; _logger = logger; - _processSignal = new ManualResetEventSlim(false); } protected override async Task ExecuteAsync(CancellationToken stoppingToken) @@ -36,19 +39,18 @@ public class JobQueueProcessor : BackgroundService { try { - // Wait for manual trigger or cancellation + // Wait for manual trigger _processSignal.Wait(stoppingToken); _processSignal.Reset(); - _logger.LogInformation("JobQueueProcessor: Processing triggered manually"); + _logger.LogInformation("JobQueueProcessor: Processing triggered"); - using var scope = _serviceProvider.CreateScope(); + // ✅ GOOD - create scope for each processing cycle + using var scope = _scopeFactory.CreateScope(); var queueService = scope.ServiceProvider.GetRequiredService(); + var pluginManager = scope.ServiceProvider.GetRequiredService(); - // Process all jobs until queue is empty - await ProcessAllJobs(queueService, stoppingToken); - - _logger.LogInformation("JobQueueProcessor: Manual processing completed"); + await ProcessQueueAsync(queueService, pluginManager, stoppingToken); } catch (OperationCanceledException) { @@ -57,8 +59,8 @@ public class JobQueueProcessor : BackgroundService } catch (Exception ex) { - _logger.LogError(ex, "JobQueueProcessor: Unexpected error in queue processor"); - await Task.Delay(TimeSpan.FromSeconds(30), stoppingToken); + _logger.LogError(ex, "JobQueueProcessor: Error in processing loop"); + await Task.Delay(5000, stoppingToken); // Wait before retry } } @@ -71,7 +73,7 @@ public class JobQueueProcessor : BackgroundService _processSignal.Set(); } - private async Task ProcessAllJobs(IJobQueueService queueService, CancellationToken cancellationToken) + private async Task ProcessQueueAsync(IJobQueueService queueService, PluginManager pluginManager, CancellationToken cancellationToken) { var startTime = DateTime.UtcNow; var initialQueueSize = await queueService.GetQueueCountAsync(); @@ -131,7 +133,8 @@ public class JobQueueProcessor : BackgroundService _logger.LogInformation("JobQueueProcessor: Processing {JobType} job {JobId} for layer {LayerName} (attempt {RetryCount}/{MaxRetries}, priority {Priority})", job.JobType, job.Id, job.LayerName, job.RetryCount + 1, job.MaxRetries, job.Priority); - using var scope = _serviceProvider.CreateScope(); + // POPRAWKA: używaj _scopeFactory zamiast _serviceProvider + using var scope = _scopeFactory.CreateScope(); var dbContext = scope.ServiceProvider.GetRequiredService(); var pluginManager = scope.ServiceProvider.GetRequiredService(); var queueService = scope.ServiceProvider.GetRequiredService(); @@ -199,7 +202,8 @@ public class JobQueueProcessor : BackgroundService _logger.LogError(ex, "JobQueueProcessor: Error processing {JobType} job {JobId} for layer {LayerName}", job.JobType, job.Id, job.LayerName); - using var scope = _serviceProvider.CreateScope(); + // POPRAWKA: tutaj też używaj _scopeFactory + using var scope = _scopeFactory.CreateScope(); var queueService = scope.ServiceProvider.GetRequiredService(); // Check if it's a retriable error diff --git a/src/Backend/DiunaBI.Plugins.Morska/Processors/T1R1Processor.cs b/src/Backend/DiunaBI.Plugins.Morska/Processors/MorskaT1R1Processor.cs similarity index 98% rename from src/Backend/DiunaBI.Plugins.Morska/Processors/T1R1Processor.cs rename to src/Backend/DiunaBI.Plugins.Morska/Processors/MorskaT1R1Processor.cs index 7b818b3..16d02a0 100644 --- a/src/Backend/DiunaBI.Plugins.Morska/Processors/T1R1Processor.cs +++ b/src/Backend/DiunaBI.Plugins.Morska/Processors/MorskaT1R1Processor.cs @@ -10,13 +10,13 @@ using Microsoft.Extensions.Logging; namespace DiunaBI.Plugins.Morska.Processors; -public class T1R1Processor : MorskaBaseProcessor +public class MorskaT1R1Processor : MorskaBaseProcessor { public override string ProcessorType => "Morska.Process.T1.R1"; private readonly AppDbContext _db; private readonly SpreadsheetsResource.ValuesResource _googleSheetValues; - private readonly ILogger _logger; + private readonly ILogger _logger; // Configuration properties loaded from layer records private int Year { get; set; } @@ -24,10 +24,10 @@ public class T1R1Processor : MorskaBaseProcessor private List? DynamicCodes { get; set; } private string? GoogleSheetName { get; set; } - public T1R1Processor( + public MorskaT1R1Processor( AppDbContext db, SpreadsheetsResource.ValuesResource googleSheetValues, - ILogger logger) + ILogger logger) { _db = db; _googleSheetValues = googleSheetValues; diff --git a/src/Backend/DiunaBI.Plugins.Morska/Processors/T1R3Processor.cs b/src/Backend/DiunaBI.Plugins.Morska/Processors/MorskaT1R3Processor.cs similarity index 98% rename from src/Backend/DiunaBI.Plugins.Morska/Processors/T1R3Processor.cs rename to src/Backend/DiunaBI.Plugins.Morska/Processors/MorskaT1R3Processor.cs index c61df8a..745d1f1 100644 --- a/src/Backend/DiunaBI.Plugins.Morska/Processors/T1R3Processor.cs +++ b/src/Backend/DiunaBI.Plugins.Morska/Processors/MorskaT1R3Processor.cs @@ -10,22 +10,22 @@ using Microsoft.Extensions.Logging; namespace DiunaBI.Plugins.Morska.Processors; -public class T1R3Processor : MorskaBaseProcessor +public class MorskaT1R3Processor : MorskaBaseProcessor { public override string ProcessorType => "Morska.Process.T1.R3"; private readonly AppDbContext _db; private readonly SpreadsheetsResource.ValuesResource _googleSheetValues; - private readonly ILogger _logger; + private readonly ILogger _logger; // Configuration properties loaded from layer records private int Year { get; set; } private string? Source { get; set; } - public T1R3Processor( + public MorskaT1R3Processor( AppDbContext db, SpreadsheetsResource.ValuesResource googleSheetValues, - ILogger logger) + ILogger logger) { _db = db; _googleSheetValues = googleSheetValues; diff --git a/src/Backend/DiunaBI.Plugins.Morska/Processors/T3MultiSourceCopySelectedCodesProcessor-TO_REMOVE.cs b/src/Backend/DiunaBI.Plugins.Morska/Processors/MorskaT3MultiSourceCopySelectedCodesProcessor-TO_REMOVE.cs similarity index 97% rename from src/Backend/DiunaBI.Plugins.Morska/Processors/T3MultiSourceCopySelectedCodesProcessor-TO_REMOVE.cs rename to src/Backend/DiunaBI.Plugins.Morska/Processors/MorskaT3MultiSourceCopySelectedCodesProcessor-TO_REMOVE.cs index 11fce8d..cccb5da 100644 --- a/src/Backend/DiunaBI.Plugins.Morska/Processors/T3MultiSourceCopySelectedCodesProcessor-TO_REMOVE.cs +++ b/src/Backend/DiunaBI.Plugins.Morska/Processors/MorskaT3MultiSourceCopySelectedCodesProcessor-TO_REMOVE.cs @@ -6,12 +6,12 @@ using Microsoft.Extensions.Logging; namespace DiunaBI.Plugins.Morska.Processors; -public class T3MultiSourceCopySelectedCodesProcessor : MorskaBaseProcessor +public class MorskaT3MultiSourceCopySelectedCodesProcessor : MorskaBaseProcessor { public override string ProcessorType => "T3.MultiSourceCopySelectedCodes"; private readonly AppDbContext _db; - private readonly ILogger _logger; + private readonly ILogger _logger; // Configuration properties loaded from layer records private int Year { get; set; } @@ -20,9 +20,9 @@ public class T3MultiSourceCopySelectedCodesProcessor : MorskaBaseProcessor private string? Codes { get; set; } private List? CodesList { get; set; } - public T3MultiSourceCopySelectedCodesProcessor( + public MorskaT3MultiSourceCopySelectedCodesProcessor( AppDbContext db, - ILogger logger) + ILogger logger) { _db = db; _logger = logger; diff --git a/src/Backend/DiunaBI.Plugins.Morska/Processors/T3MultiSourceCopySelectedCodesYearSummaryProcessor-TO_REMOVE.cs b/src/Backend/DiunaBI.Plugins.Morska/Processors/MorskaT3MultiSourceCopySelectedCodesYearSummaryProcessor-TO_REMOVE.cs similarity index 96% rename from src/Backend/DiunaBI.Plugins.Morska/Processors/T3MultiSourceCopySelectedCodesYearSummaryProcessor-TO_REMOVE.cs rename to src/Backend/DiunaBI.Plugins.Morska/Processors/MorskaT3MultiSourceCopySelectedCodesYearSummaryProcessor-TO_REMOVE.cs index dd7f50c..b309ab2 100644 --- a/src/Backend/DiunaBI.Plugins.Morska/Processors/T3MultiSourceCopySelectedCodesYearSummaryProcessor-TO_REMOVE.cs +++ b/src/Backend/DiunaBI.Plugins.Morska/Processors/MorskaT3MultiSourceCopySelectedCodesYearSummaryProcessor-TO_REMOVE.cs @@ -6,19 +6,19 @@ using Microsoft.Extensions.Logging; namespace DiunaBI.Plugins.Morska.Processors; -public class T3MultiSourceCopySelectedCodesYearSummaryProcessor : MorskaBaseProcessor +public class MorskaT3MultiSourceCopySelectedCodesYearSummaryProcessor : MorskaBaseProcessor { public override string ProcessorType => "T3.MultiSourceCopySelectedCodesYearSummary"; private readonly AppDbContext _db; - private readonly ILogger _logger; + private readonly ILogger _logger; // Configuration properties loaded from layer records private int Year { get; set; } - public T3MultiSourceCopySelectedCodesYearSummaryProcessor( + public MorskaT3MultiSourceCopySelectedCodesYearSummaryProcessor( AppDbContext db, - ILogger logger) + ILogger logger) { _db = db; _logger = logger; diff --git a/src/Backend/DiunaBI.Plugins.Morska/Processors/T3MultiSourceSummaryProcessor.cs b/src/Backend/DiunaBI.Plugins.Morska/Processors/MorskaT3MultiSourceSummaryProcessor.cs similarity index 98% rename from src/Backend/DiunaBI.Plugins.Morska/Processors/T3MultiSourceSummaryProcessor.cs rename to src/Backend/DiunaBI.Plugins.Morska/Processors/MorskaT3MultiSourceSummaryProcessor.cs index ff5198c..e5340e4 100644 --- a/src/Backend/DiunaBI.Plugins.Morska/Processors/T3MultiSourceSummaryProcessor.cs +++ b/src/Backend/DiunaBI.Plugins.Morska/Processors/MorskaT3MultiSourceSummaryProcessor.cs @@ -7,12 +7,12 @@ using DiunaBI.Core.Services.Calculations; namespace DiunaBI.Plugins.Morska.Processors; -public class T3MultiSourceSummaryProcessor : MorskaBaseProcessor +public class MorskaT3MultiSourceSummaryProcessor : MorskaBaseProcessor { public override string ProcessorType => "Morska.Process.T3.MultiSourceSummary"; private readonly AppDbContext _db; - private readonly ILogger _logger; + private readonly ILogger _logger; // Configuration properties loaded from layer records private int Year { get; set; } @@ -20,9 +20,9 @@ public class T3MultiSourceSummaryProcessor : MorskaBaseProcessor private List? Sources { get; set; } private List? DynamicCodes { get; set; } - public T3MultiSourceSummaryProcessor( + public MorskaT3MultiSourceSummaryProcessor( AppDbContext db, - ILogger logger) + ILogger logger) { _db = db; _logger = logger; diff --git a/src/Backend/DiunaBI.Plugins.Morska/Processors/T3MultiSourceYearSummaryProcessor.cs b/src/Backend/DiunaBI.Plugins.Morska/Processors/MorskaT3MultiSourceYearSummaryProcessor.cs similarity index 97% rename from src/Backend/DiunaBI.Plugins.Morska/Processors/T3MultiSourceYearSummaryProcessor.cs rename to src/Backend/DiunaBI.Plugins.Morska/Processors/MorskaT3MultiSourceYearSummaryProcessor.cs index c50cffe..0b8642b 100644 --- a/src/Backend/DiunaBI.Plugins.Morska/Processors/T3MultiSourceYearSummaryProcessor.cs +++ b/src/Backend/DiunaBI.Plugins.Morska/Processors/MorskaT3MultiSourceYearSummaryProcessor.cs @@ -7,21 +7,21 @@ using DiunaBI.Core.Services.Calculations; namespace DiunaBI.Plugins.Morska.Processors; -public class T3MultiSourceYearSummaryProcessor : MorskaBaseProcessor +public class MorskaT3MultiSourceYearSummaryProcessor : MorskaBaseProcessor { public override string ProcessorType => "Morska.Process.T3.MultiSourceYearSummary"; private readonly AppDbContext _db; - private readonly ILogger _logger; + private readonly ILogger _logger; // Configuration properties loaded from layer records private int Year { get; set; } private List? Sources { get; set; } private List? DynamicCodes { get; set; } - public T3MultiSourceYearSummaryProcessor( + public MorskaT3MultiSourceYearSummaryProcessor( AppDbContext db, - ILogger logger) + ILogger logger) { _db = db; _logger = logger; diff --git a/src/Backend/DiunaBI.Plugins.Morska/Processors/T3SourceYearSummaryProcessor.cs b/src/Backend/DiunaBI.Plugins.Morska/Processors/MorskaT3SourceYearSummaryProcessor.cs similarity index 97% rename from src/Backend/DiunaBI.Plugins.Morska/Processors/T3SourceYearSummaryProcessor.cs rename to src/Backend/DiunaBI.Plugins.Morska/Processors/MorskaT3SourceYearSummaryProcessor.cs index 00c0343..2280cc7 100644 --- a/src/Backend/DiunaBI.Plugins.Morska/Processors/T3SourceYearSummaryProcessor.cs +++ b/src/Backend/DiunaBI.Plugins.Morska/Processors/MorskaT3SourceYearSummaryProcessor.cs @@ -7,22 +7,22 @@ using DiunaBI.Core.Services; namespace DiunaBI.Plugins.Morska.Processors; -public class T3SourceYearSummaryProcessor : MorskaBaseProcessor +public class MorskaT3SourceYearSummaryProcessor : MorskaBaseProcessor { public override string ProcessorType => "Morska.Process.T3.SourceYearSummary"; private readonly AppDbContext _db; private readonly SpreadsheetsResource.ValuesResource _googleSheetValues; - private readonly ILogger _logger; + private readonly ILogger _logger; // Configuration properties loaded from layer records private int Year { get; set; } private string? Source { get; set; } - public T3SourceYearSummaryProcessor( + public MorskaT3SourceYearSummaryProcessor( AppDbContext db, SpreadsheetsResource.ValuesResource googleSheetValues, - ILogger logger) + ILogger logger) { _db = db; _googleSheetValues = googleSheetValues; diff --git a/src/Backend/DiunaBI.Plugins.Morska/Processors/T4R2Processor.cs b/src/Backend/DiunaBI.Plugins.Morska/Processors/MorskaT4R2Processor.cs similarity index 99% rename from src/Backend/DiunaBI.Plugins.Morska/Processors/T4R2Processor.cs rename to src/Backend/DiunaBI.Plugins.Morska/Processors/MorskaT4R2Processor.cs index 6f5271d..81d49b1 100644 --- a/src/Backend/DiunaBI.Plugins.Morska/Processors/T4R2Processor.cs +++ b/src/Backend/DiunaBI.Plugins.Morska/Processors/MorskaT4R2Processor.cs @@ -9,13 +9,13 @@ using DiunaBI.Core.Services; namespace DiunaBI.Plugins.Morska.Processors; -public class T4R2Processor : MorskaBaseProcessor +public class MorskaT4R2Processor : MorskaBaseProcessor { public override string ProcessorType => "Morska.Process.T4.R2"; private readonly AppDbContext _db; private readonly SpreadsheetsResource.ValuesResource _googleSheetValues; - private readonly ILogger _logger; + private readonly ILogger _logger; // Configuration properties loaded from layer records private int Year { get; set; } @@ -24,10 +24,10 @@ public class T4R2Processor : MorskaBaseProcessor private string? ReportSheetName { get; set; } private string? InvoicesSheetName { get; set; } - public T4R2Processor( + public MorskaT4R2Processor( AppDbContext db, SpreadsheetsResource.ValuesResource googleSheetValues, - ILogger logger) + ILogger logger) { _db = db; _googleSheetValues = googleSheetValues; diff --git a/src/Backend/DiunaBI.Plugins.Morska/Processors/T4SingleSourceProcessor.cs b/src/Backend/DiunaBI.Plugins.Morska/Processors/MorskaT4SingleSourceProcessor.cs similarity index 97% rename from src/Backend/DiunaBI.Plugins.Morska/Processors/T4SingleSourceProcessor.cs rename to src/Backend/DiunaBI.Plugins.Morska/Processors/MorskaT4SingleSourceProcessor.cs index 30cdab3..c4bd66e 100644 --- a/src/Backend/DiunaBI.Plugins.Morska/Processors/T4SingleSourceProcessor.cs +++ b/src/Backend/DiunaBI.Plugins.Morska/Processors/MorskaT4SingleSourceProcessor.cs @@ -6,13 +6,13 @@ using DiunaBI.Core.Database.Context; namespace DiunaBI.Plugins.Morska.Processors; -public class T4SingleSourceProcessor : MorskaBaseProcessor +public class MorskaT4SingleSourceProcessor : MorskaBaseProcessor { public override string ProcessorType => "Morska.Process.T4.SingleSource"; private readonly AppDbContext _db; private readonly SpreadsheetsResource.ValuesResource _googleSheetValues; - private readonly ILogger _logger; + private readonly ILogger _logger; // Configuration properties loaded from layer records private int Year { get; set; } @@ -20,10 +20,10 @@ public class T4SingleSourceProcessor : MorskaBaseProcessor private string? SourceLayer { get; set; } private string? Source { get; set; } - public T4SingleSourceProcessor( + public MorskaT4SingleSourceProcessor( AppDbContext db, SpreadsheetsResource.ValuesResource googleSheetValues, - ILogger logger) + ILogger logger) { _db = db; _googleSheetValues = googleSheetValues; diff --git a/src/Backend/DiunaBI.Plugins.Morska/Processors/T5LastValuesProcessor.cs b/src/Backend/DiunaBI.Plugins.Morska/Processors/MorskaT5LastValuesProcessor.cs similarity index 98% rename from src/Backend/DiunaBI.Plugins.Morska/Processors/T5LastValuesProcessor.cs rename to src/Backend/DiunaBI.Plugins.Morska/Processors/MorskaT5LastValuesProcessor.cs index 7354601..0d84c0c 100644 --- a/src/Backend/DiunaBI.Plugins.Morska/Processors/T5LastValuesProcessor.cs +++ b/src/Backend/DiunaBI.Plugins.Morska/Processors/MorskaT5LastValuesProcessor.cs @@ -6,12 +6,12 @@ using Microsoft.Extensions.Logging; namespace DiunaBI.Plugins.Morska.Processors; -public class T5LastValuesProcessor : MorskaBaseProcessor +public class MorskaT5LastValuesProcessor : MorskaBaseProcessor { public override string ProcessorType => "Morska.Process.T5.LastValues"; private readonly AppDbContext _db; - private readonly ILogger _logger; + private readonly ILogger _logger; // Configuration properties loaded from layer records private int Year { get; set; } @@ -19,9 +19,9 @@ public class T5LastValuesProcessor : MorskaBaseProcessor private string? SourceLayer { get; set; } private string? Source { get; set; } - public T5LastValuesProcessor( + public MorskaT5LastValuesProcessor( AppDbContext db, - ILogger logger) + ILogger logger) { _db = db; _logger = logger; diff --git a/src/Backend/DiunaBI.WebAPI/Controllers/LayersController.cs b/src/Backend/DiunaBI.WebAPI/Controllers/LayersController.cs index bc60ece..2fca29c 100644 --- a/src/Backend/DiunaBI.WebAPI/Controllers/LayersController.cs +++ b/src/Backend/DiunaBI.WebAPI/Controllers/LayersController.cs @@ -829,7 +829,7 @@ public class LayersController : Controller x.Records!.Any(y => y.Code == "Type" && y.Desc1 == "ImportWorker") && x.Records!.Any(y => y.Code == "IsEnabled" && y.Desc1 == "True") && !x.IsDeleted && !x.IsCancelled - ); + ).Take(5); // If specific layerId is provided, filter to that layer only if (layerId.HasValue) @@ -935,7 +935,7 @@ public class LayersController : Controller x.Records!.Any(y => y.Code == "Type" && y.Desc1 == "ProcessWorker") && x.Records!.Any(y => y.Code == "IsEnabled" && y.Desc1 == "True") && !x.IsDeleted && !x.IsCancelled - ); + ).Take(5); // If specific layerId is provided, filter to that layer only if (layerId.HasValue) @@ -966,6 +966,7 @@ public class LayersController : Controller foreach (var processWorker in processWorkerLayers) { + // POPRAWIONE: Używaj Plugin zamiast ProcessorType var pluginName = processWorker.Records!.FirstOrDefault(x => x.Code == "Plugin")?.Desc1; if (string.IsNullOrEmpty(pluginName)) { @@ -974,20 +975,12 @@ public class LayersController : Controller continue; } - var processorType = processWorker.Records!.FirstOrDefault(x => x.Code == "ProcessorType")?.Desc1; - if (string.IsNullOrEmpty(processorType)) - { - _logger.LogWarning("EnqueueProcessWorkers: No processor type found for layer {LayerName} ({LayerId}), skipping", - processWorker.Name, processWorker.Id); - continue; - } - - // Check if processor exists - var processor = _pluginManager.GetProcessor(processorType); + // POPRAWIONE: Sprawdź czy processor istnieje przez pluginName + var processor = _pluginManager.GetProcessor(pluginName); if (processor == null) { - _logger.LogWarning("EnqueueProcessWorkers: Processor {ProcessorType} not found for layer {LayerName} ({LayerId}), skipping", - processorType, processWorker.Name, processWorker.Id); + _logger.LogWarning("EnqueueProcessWorkers: Processor {PluginName} not found for layer {LayerName} ({LayerId}), skipping", + pluginName, processWorker.Name, processWorker.Id); continue; } @@ -1003,7 +996,7 @@ public class LayersController : Controller { LayerId = processWorker.Id, LayerName = processWorker.Name ?? "Unknown", - PluginName = processorType, // Use processorType as PluginName for process jobs + PluginName = pluginName, // POPRAWIONE: Używaj pluginName bezpośrednio JobType = JobType.Process, Priority = priority, MaxRetries = 3, @@ -1014,8 +1007,8 @@ public class LayersController : Controller await _queueService.EnqueueJobAsync(job); queuedCount++; - _logger.LogDebug("EnqueueProcessWorkers: Queued process job for layer {LayerName} ({LayerId}) with processor {ProcessorType}, priority {Priority}", - processWorker.Name, processWorker.Id, processorType, priority); + _logger.LogDebug("EnqueueProcessWorkers: Queued process job for layer {LayerName} ({LayerId}) with plugin {PluginName}, priority {Priority}", + processWorker.Name, processWorker.Id, pluginName, priority); } var totalQueueSize = await _queueService.GetQueueCountAsync(); @@ -1065,8 +1058,16 @@ public class LayersController : Controller _logger.LogInformation("RunQueueJobs: Triggering queue processing for {QueueSize} jobs", queueSize); - // PRZYWRÓĆ SINGLETON ACCESS: - var queueProcessor = HttpContext.RequestServices.GetRequiredService(); + // ZMIEŃ NA DOSTĘP PRZEZ IHostedService: + var hostedServices = HttpContext.RequestServices.GetServices(); + var queueProcessor = hostedServices.OfType().FirstOrDefault(); + + if (queueProcessor == null) + { + _logger.LogError("RunQueueJobs: JobQueueProcessor not found"); + return BadRequest("JobQueueProcessor not found"); + } + queueProcessor.TriggerProcessing(); return Ok(new diff --git a/src/Backend/DiunaBI.WebAPI/Program.cs b/src/Backend/DiunaBI.WebAPI/Program.cs index 99b7654..bb1c1ff 100644 --- a/src/Backend/DiunaBI.WebAPI/Program.cs +++ b/src/Backend/DiunaBI.WebAPI/Program.cs @@ -71,9 +71,10 @@ builder.Services.AddAuthentication(options => // Queue services builder.Services.AddScoped(); -builder.Services.AddSingleton(); +builder.Services.AddHostedService(); // ✅ GOOD - with proper scope factory // Google Sheets dependencies +Console.WriteLine("Adding Google Sheets dependencies..."); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(provider => diff --git a/tools/http-tests/AutoImport.http b/tools/http-tests/AutoImport.http index a5f2d95..6b35da4 100644 --- a/tools/http-tests/AutoImport.http +++ b/tools/http-tests/AutoImport.http @@ -1,3 +1,3 @@ ### -GET http://localhost:5400/api/Layers/AddPriorityRecords +GET http://localhost:5400/api/Layers/RunQueueJobs/10763478CB738D4ecb2h76g803478CB738D4e