Refactor draft version selection
This commit is contained in:
parent
5234999403
commit
41b356a02b
|
|
@ -1,5 +1,6 @@
|
|||
using System.Text.Json;
|
||||
using Elsa.Abstractions;
|
||||
using Elsa.Common.Models;
|
||||
using Elsa.Workflows.Api.Models;
|
||||
using Elsa.Workflows.Core.Serialization;
|
||||
using Elsa.Workflows.Management.Mappers;
|
||||
|
|
@ -48,7 +49,7 @@ internal class Import : ElsaEndpoint<WorkflowDefinitionRequest, WorkflowDefiniti
|
|||
|
||||
// Get a workflow draft version.
|
||||
var draft = !string.IsNullOrWhiteSpace(definitionId)
|
||||
? await _workflowDefinitionPublisher.GetDraftAsync(definitionId, cancellationToken:cancellationToken)
|
||||
? await _workflowDefinitionPublisher.GetDraftAsync(definitionId, VersionOptions.Latest, cancellationToken)
|
||||
: default;
|
||||
|
||||
var isNew = draft == null;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
using System.Text.Json;
|
||||
using Elsa.Abstractions;
|
||||
using Elsa.Common.Models;
|
||||
using Elsa.Workflows.Api.Models;
|
||||
using Elsa.Workflows.Core.Activities;
|
||||
using Elsa.Workflows.Core.Serialization;
|
||||
|
|
@ -37,10 +38,18 @@ internal class Post : ElsaEndpoint<WorkflowDefinitionRequest, WorkflowDefinition
|
|||
var definitionId = request.DefinitionId;
|
||||
|
||||
// Get a workflow draft version.
|
||||
var draftVersion = request.Version != null ? VersionOptions.SpecificVersion(request.Version.Value) : VersionOptions.Latest;
|
||||
|
||||
var draft = !string.IsNullOrWhiteSpace(definitionId)
|
||||
? await _workflowDefinitionPublisher.GetDraftAsync(definitionId, request.Version, cancellationToken)
|
||||
? await _workflowDefinitionPublisher.GetDraftAsync(definitionId, draftVersion, cancellationToken)
|
||||
: default;
|
||||
|
||||
if (draft == null && request.Version != null)
|
||||
{
|
||||
AddError("The requested version does not exist");
|
||||
await SendErrorsAsync(cancellation: cancellationToken);
|
||||
}
|
||||
|
||||
var isNew = draft == null;
|
||||
|
||||
// Create a new workflow in case no existing definition was found.
|
||||
|
|
|
|||
|
|
@ -87,15 +87,13 @@ public class WorkflowDefinitionManager : IWorkflowDefinitionManager
|
|||
var publishedAndLatestVersions = (await _store.FindManyByDefinitionIdAsync(definitionId, VersionOptions.LatestAndPublished, 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 draft = await _workflowPublisher.GetDraftAsync(definitionId, version, cancellationToken);
|
||||
var draft = await _workflowPublisher.GetDraftAsync(definitionId, VersionOptions.SpecificVersion(version), cancellationToken);
|
||||
draft!.Id = _identityGenerator.GenerateId();
|
||||
draft.Version = latestVersion.Version + 1;
|
||||
draft.IsLatest = true;
|
||||
|
|
|
|||
|
|
@ -121,9 +121,9 @@ public class WorkflowDefinitionPublisher : IWorkflowDefinitionPublisher
|
|||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public async Task<WorkflowDefinition?> GetDraftAsync(string definitionId, int? version, CancellationToken cancellationToken = default)
|
||||
public async Task<WorkflowDefinition?> GetDraftAsync(string definitionId, VersionOptions versionOptions, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var definition = (await _workflowDefinitionStore.FindManyByDefinitionIdAsync(definitionId, version.HasValue ? VersionOptions.SpecificVersion(version.Value) : VersionOptions.Latest, cancellationToken)).FirstOrDefault();
|
||||
var definition = (await _workflowDefinitionStore.FindManyByDefinitionIdAsync(definitionId, versionOptions, cancellationToken)).FirstOrDefault();
|
||||
|
||||
if (definition == null)
|
||||
return null;
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
using Elsa.Common.Models;
|
||||
using Elsa.Workflows.Management.Entities;
|
||||
|
||||
namespace Elsa.Workflows.Management.Services;
|
||||
|
|
@ -9,6 +10,6 @@ public interface IWorkflowDefinitionPublisher
|
|||
Task<WorkflowDefinition> PublishAsync(WorkflowDefinition definition, CancellationToken cancellationToken = default);
|
||||
Task<WorkflowDefinition?> RetractAsync(string definitionId, CancellationToken cancellationToken = default);
|
||||
Task<WorkflowDefinition> RetractAsync(WorkflowDefinition definition, CancellationToken cancellationToken = default);
|
||||
Task<WorkflowDefinition?> GetDraftAsync(string definitionId, int? version = null, CancellationToken cancellationToken = default);
|
||||
Task<WorkflowDefinition?> GetDraftAsync(string definitionId, VersionOptions versionOptions, CancellationToken cancellationToken = default);
|
||||
Task<WorkflowDefinition> SaveDraftAsync(WorkflowDefinition definition, CancellationToken cancellationToken = default);
|
||||
}
|
||||
Loading…
Reference in a new issue