parent
9ef639689b
commit
72fcfd7ff4
|
|
@ -0,0 +1,13 @@
|
|||
using System;
|
||||
using System.Linq.Expressions;
|
||||
using Elsa.Models;
|
||||
|
||||
namespace Elsa.Persistence.Specifications.WorkflowDefinitions
|
||||
{
|
||||
public class LatestOrPublishedWorkflowDefinitionIdSpecification : Specification<WorkflowDefinition>
|
||||
{
|
||||
public string WorkflowDefinitionId { get; set; }
|
||||
public LatestOrPublishedWorkflowDefinitionIdSpecification(string workflowDefinitionId) => WorkflowDefinitionId = workflowDefinitionId;
|
||||
public override Expression<Func<WorkflowDefinition, bool>> ToExpression() => x => x.DefinitionId == WorkflowDefinitionId && (x.IsLatest || x.IsPublished);
|
||||
}
|
||||
}
|
||||
|
|
@ -4,7 +4,10 @@ using System.Threading.Tasks;
|
|||
using Elsa.Events;
|
||||
using Elsa.Models;
|
||||
using Elsa.Persistence;
|
||||
using Elsa.Persistence.Specifications;
|
||||
using Elsa.Persistence.Specifications.WorkflowDefinitions;
|
||||
using MediatR;
|
||||
using Open.Linq.AsyncExtensions;
|
||||
using WorkflowDefinitionIdSpecification = Elsa.Persistence.Specifications.WorkflowInstances.WorkflowDefinitionIdSpecification;
|
||||
|
||||
namespace Elsa.Services.Workflows
|
||||
|
|
@ -57,18 +60,18 @@ namespace Elsa.Services.Workflows
|
|||
|
||||
public async Task<WorkflowDefinition> PublishAsync(WorkflowDefinition workflowDefinition, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var publishedDefinition = await _workflowDefinitionStore.FindByDefinitionIdAsync(
|
||||
workflowDefinition.DefinitionId,
|
||||
VersionOptions.LatestOrPublished,
|
||||
cancellationToken);
|
||||
var definitionId = workflowDefinition.DefinitionId;
|
||||
|
||||
// Reset current latest and published definitions.
|
||||
var publishedAndOrLatestDefinitions = await _workflowDefinitionStore.FindManyAsync(new LatestOrPublishedWorkflowDefinitionIdSpecification(definitionId), cancellationToken: cancellationToken).ToList();
|
||||
|
||||
if (publishedDefinition != null)
|
||||
foreach (var publishedAndOrLatestDefinition in publishedAndOrLatestDefinitions)
|
||||
{
|
||||
publishedDefinition.IsPublished = false;
|
||||
publishedDefinition.IsLatest = false;
|
||||
await _workflowDefinitionStore.SaveAsync(publishedDefinition, cancellationToken);
|
||||
publishedAndOrLatestDefinition.IsPublished = false;
|
||||
publishedAndOrLatestDefinition.IsLatest = false;
|
||||
await _workflowDefinitionStore.SaveAsync(publishedAndOrLatestDefinition, cancellationToken);
|
||||
}
|
||||
|
||||
|
||||
if (workflowDefinition.IsPublished)
|
||||
workflowDefinition.Version++;
|
||||
else
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ using Elsa.Persistence.YesSql.Indexes;
|
|||
using Elsa.Persistence.YesSql.Services;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using YesSql;
|
||||
using YesSql.Services;
|
||||
using IIdGenerator = Elsa.Services.IIdGenerator;
|
||||
|
||||
namespace Elsa.Persistence.YesSql.Stores
|
||||
|
|
@ -27,6 +28,10 @@ namespace Elsa.Persistence.YesSql.Stores
|
|||
return specification switch
|
||||
{
|
||||
EntityIdSpecification<WorkflowDefinition> s => Query<WorkflowDefinitionIndex>(session, x => x.DefinitionId == s.Id),
|
||||
LatestOrPublishedWorkflowDefinitionIdSpecification s => Query<WorkflowDefinitionIndex>(session, x => x.DefinitionId == s.WorkflowDefinitionId),
|
||||
WorkflowDefinitionIdSpecification s => Query<WorkflowDefinitionIndex>(session, x => x.DefinitionId == s.Id),
|
||||
ManyWorkflowDefinitionIdsSpecification s => Query<WorkflowDefinitionIndex>(session, x => x.DefinitionId.IsIn(s.Ids)),
|
||||
WorkflowDefinitionVersionIdSpecification s => Query<WorkflowDefinitionIndex>(session, x => x.DefinitionVersionId == s.VersionId),
|
||||
VersionOptionsSpecification s => Query<WorkflowDefinitionIndex>(session).WithVersion(s.VersionOptions),
|
||||
_ => AutoMapSpecification<WorkflowDefinitionIndex>(session, specification)
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in a new issue