/// <summary> /// Deletes scenario output data, typically as a result of a failure so /// that we don't leave partial data. /// /// Note that schedule data may have been modified (E.g. Break /// efficiency) but we don't reset that because it doesn't relate to a /// specific scenario. /// </summary> /// <param name="scenarioId"></param> private void DeleteOutputData(Guid scenarioId) { var runReset = new RunReset(_repositoryFactory); runReset.ResetScenarioOutputData(scenarioId, new List <string>() { "autobook", "isr", "rzr" }, true, true, true); // Leave Smooth recommendations, they relate to the whole run }
private void OnRunReset(int playerIndex) { RunReset?.Invoke(this, new RunResetArgs(playerIndex)); }
protected override Task DeleteRunDataAsync( IReadOnlyCollection <RunDeletionInfo> runDeletionInfos, CancellationToken cancellationToken) { var runReset = new RunReset(_repositoryFactory); foreach (var runDeletionInfo in runDeletionInfos) { cancellationToken.ThrowIfCancellationRequested(); using (var scope = _repositoryFactory.BeginRepositoryScope()) { try { var repositories = scope.CreateRepositories( typeof(IRunRepository), typeof(IScenarioRepository), typeof(IPassRepository), typeof(IScenarioCampaignResultRepository), typeof(IScenarioCampaignFailureRepository), typeof(IPipelineAuditEventRepository), typeof(IAutoBookTaskReportRepository) ); var runRepository = repositories.Get <IRunRepository>(); var scenarioRepository = repositories.Get <IScenarioRepository>(); var passRepository = repositories.Get <IPassRepository>(); var scenarioCampaignResultRepository = repositories.Get <IScenarioCampaignResultRepository>(); var scenarioCampaignFailureRepository = repositories.Get <IScenarioCampaignFailureRepository>(); var pipelineAuditEventRepository = repositories.Get <IPipelineAuditEventRepository>(); var autoBookTaskReportRepository = repositories.Get <IAutoBookTaskReportRepository>(); // Don't delete ScenarioResults, KPI data is needed foreach (var scenarioId in runDeletionInfo.ScenarioIds) { runReset.ResetScenarioOutputData( scenarioId, new List <string> { "smooth", "autobook", "isr", "rzr" }, resetAutoBookFailures: true, resetResultFiles: true); } runReset.ResetSmoothFailures(runDeletionInfo.RunId); foreach (var scenarioId in runDeletionInfo.ScenarioIds) { passRepository.RemoveByScenarioId(scenarioId); scenarioRepository.Delete(scenarioId); scenarioCampaignResultRepository.Delete(scenarioId); scenarioCampaignFailureRepository.RemoveByScenarioId(scenarioId); } var pipelineItems = pipelineAuditEventRepository.GetAllByRunId(runDeletionInfo.RunId); if (pipelineItems != null && pipelineItems.Any()) { pipelineAuditEventRepository.DeleteRange(pipelineItems); } pipelineAuditEventRepository.SaveChanges(); var autobookTaskReports = autoBookTaskReportRepository.GetAllByRunId(runDeletionInfo.RunId); if (autobookTaskReports != null && autobookTaskReports.Any()) { autoBookTaskReportRepository.DeleteRange(autobookTaskReports); } autoBookTaskReportRepository.SaveChanges(); runRepository.Remove(runDeletionInfo.RunId); runRepository.SaveChanges(); } catch (Exception ex) { throw new RunCleaningException( $"Deletion of run with '{runDeletionInfo.RunId}' id has been failed. See inner exception for more details.", ex); } } } return(Task.CompletedTask); }