using Purrse.Core.Interfaces.Services; namespace Purrse.Api.Services; public class ScheduledTransactionProcessor : BackgroundService { private readonly IServiceScopeFactory _scopeFactory; private readonly ILogger _logger; public ScheduledTransactionProcessor(IServiceScopeFactory scopeFactory, ILogger logger) { _scopeFactory = scopeFactory; _logger = logger; } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { try { using var scope = _scopeFactory.CreateScope(); var service = scope.ServiceProvider.GetRequiredService(); await service.ProcessDueTransactionsAsync(); } catch (Exception ex) { _logger.LogError(ex, "Error processing scheduled transactions"); } await Task.Delay(TimeSpan.FromHours(1), stoppingToken); } } }