namespace QuestionsApi.Services; public sealed class ExamSimulationScoringMigrationService : BackgroundService { private readonly ExamSimulationStore _simulations; private readonly ILogger _logger; public ExamSimulationScoringMigrationService( ExamSimulationStore simulations, ILogger logger) { _simulations = simulations; _logger = logger; } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { try { var result = await _simulations.BackfillScoringModelAsync(stoppingToken); _logger.LogInformation( "Exam simulation scoring migration completed; recalculated {UpdatedCount} simulation(s)", result.UpdatedCount); foreach (var reference in result.MissingQuestionIds) _logger.LogWarning( "Exam simulation scoring migration used neutral difficulty for missing question {Reference}", reference); } catch (OperationCanceledException) when (stoppingToken.IsCancellationRequested) { } catch (Exception exception) { _logger.LogError(exception, "Exam simulation scoring migration failed"); } } }