From 142af4e3b99b5f777d46a8fc1f4cd2f6da3b50dd Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Thu, 20 Jul 2023 15:50:22 +0200 Subject: [PATCH] Allow to revert to the latest version --- .../Services/WorkflowDefinitionManager.cs | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/modules/Elsa.Workflows.Management/Services/WorkflowDefinitionManager.cs b/src/modules/Elsa.Workflows.Management/Services/WorkflowDefinitionManager.cs index 474dd8b48..74d8449e3 100644 --- a/src/modules/Elsa.Workflows.Management/Services/WorkflowDefinitionManager.cs +++ b/src/modules/Elsa.Workflows.Management/Services/WorkflowDefinitionManager.cs @@ -103,19 +103,18 @@ public class WorkflowDefinitionManager : IWorkflowDefinitionManager /// public async Task RevertVersionAsync(string definitionId, int version, CancellationToken cancellationToken = default) { - var filter = new WorkflowDefinitionFilter { DefinitionId = definitionId, VersionOptions = VersionOptions.LatestAndPublished }; - var publishedAndLatestVersions = (await _store.FindManyAsync(filter, cancellationToken)).ToList(); - - if (publishedAndLatestVersions.Any(v => v.Version == version)) - throw new Exception("Latest or published versions cannot be reverted"); - - var latestVersion = publishedAndLatestVersions.First(v => v.IsLatest); - latestVersion.IsLatest = false; - await _store.SaveAsync(latestVersion, cancellationToken); + var filter = new WorkflowDefinitionFilter { DefinitionId = definitionId, VersionOptions = VersionOptions.Latest }; + var latestVersion = await _store.FindAsync(filter, cancellationToken); + + if(latestVersion != null) + { + latestVersion.IsLatest = false; + await _store.SaveAsync(latestVersion, cancellationToken); + } var draft = await _workflowPublisher.GetDraftAsync(definitionId, VersionOptions.SpecificVersion(version), cancellationToken); draft!.Id = _identityGenerator.GenerateId(); - draft.Version = latestVersion.Version + 1; + draft.Version = (latestVersion?.Version ?? 0) + 1; draft.IsLatest = true; await _store.SaveAsync(draft, cancellationToken);