Allow to revert to the latest version

This commit is contained in:
Sipke Schoorstra 2023-07-20 15:50:22 +02:00
parent b14604f3b8
commit 142af4e3b9

View file

@ -103,19 +103,18 @@ public class WorkflowDefinitionManager : IWorkflowDefinitionManager
/// <inheritdoc />
public async Task<WorkflowDefinition> 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);