From e8fab0c3dd4ebb95b2403a3029f2b78c623a12a8 Mon Sep 17 00:00:00 2001 From: "HOME-LAPTOP\\kshkulev" Date: Fri, 24 Oct 2025 17:23:54 +0900 Subject: [PATCH] Load initiated operations --- .../OperationExecutionService.cs | 33 ++++++++++++++++--- Hcs.WebApp/Services/OperationService.cs | 20 +++++++++++ 2 files changed, 49 insertions(+), 4 deletions(-) diff --git a/Hcs.WebApp/BackgroundServices/OperationExecutionService.cs b/Hcs.WebApp/BackgroundServices/OperationExecutionService.cs index 3dbb888..d5496df 100644 --- a/Hcs.WebApp/BackgroundServices/OperationExecutionService.cs +++ b/Hcs.WebApp/BackgroundServices/OperationExecutionService.cs @@ -1,16 +1,41 @@ -namespace Hcs.WebApp.BackgroundServices +using Hcs.WebApp.Services; + +namespace Hcs.WebApp.BackgroundServices { - public class OperationExecutionService(OperationExecutionState state) : BackgroundService + public class OperationExecutionService(OperationExecutionState state, IServiceScopeFactory scopeFactory) : BackgroundService { + private const int SLEEP_TIME = 30000; + private readonly OperationExecutionState state = state; + private readonly IServiceScopeFactory scopeFactory = scopeFactory; protected override async Task ExecuteAsync(CancellationToken stoppingToken) { + await InitializeState(); + + var scope = scopeFactory.CreateScope(); + var operationService = scope.ServiceProvider.GetRequiredService(); + while (!stoppingToken.IsCancellationRequested) { - await Task.Delay(10000, stoppingToken); + while (state.TryDequeueOperation(out var operation)) + { + await operationService.SetOperationMessageGuid(operation.Id, Guid.NewGuid().ToString()); + } - // TODO + await Task.Delay(SLEEP_TIME, stoppingToken); + } + } + + private async Task InitializeState() + { + using var scope = scopeFactory.CreateScope(); + var operationService = scope.ServiceProvider.GetRequiredService(); + + var operations = await operationService.GetInitiatedOperations(); + foreach (var operation in operations) + { + state.EnqueueOperation(operation); } } } diff --git a/Hcs.WebApp/Services/OperationService.cs b/Hcs.WebApp/Services/OperationService.cs index 4cade7f..0503737 100644 --- a/Hcs.WebApp/Services/OperationService.cs +++ b/Hcs.WebApp/Services/OperationService.cs @@ -26,5 +26,25 @@ namespace Hcs.WebApp.Services await context.SaveChangesAsync(); return operation; } + + public async Task> GetInitiatedOperations() + { + using var context = factory.CreateDbContext(); + return await (from operation in context.Operations + where !operation.EndedAt.HasValue && string.IsNullOrEmpty(operation.MessageGuid) + select operation).ToListAsync(); + } + + public async Task SetOperationMessageGuid(int operationId, string messageGuid) + { + using var context = factory.CreateDbContext(); + var operation = await context.Operations.FirstOrDefaultAsync(x => x.Id == operationId); + if (operation != null) + { + operation.MessageGuid = messageGuid; + + await context.SaveChangesAsync(); + } + } } }