elsa-core/src/server/Elsa.Server.GraphQL/Mutation.cs

105 lines
3.8 KiB
C#
Raw Normal View History

using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using AutoMapper;
using Elsa.Models;
2020-10-10 15:13:52 +00:00
using Elsa.Queries;
using Elsa.Serialization;
using Elsa.Server.GraphQL.Models;
using Elsa.Server.GraphQL.Types;
using Elsa.Services;
using HotChocolate;
2020-10-10 15:13:52 +00:00
using Open.Linq.AsyncExtensions;
using YesSql;
using IIdGenerator = Elsa.Services.IIdGenerator;
namespace Elsa.Server.GraphQL
{
public class Mutation
{
private readonly IMapper _mapper;
public Mutation(IMapper mapper)
{
2020-10-10 15:13:52 +00:00
_mapper = mapper;
}
2020-10-10 15:13:52 +00:00
2020-10-09 20:26:19 +00:00
public async Task<WorkflowDefinition> SaveWorkflowDefinition(
string? id,
WorkflowSaveAction saveAction,
WorkflowInput workflowInput,
2020-10-10 15:13:52 +00:00
[Service] ISession session,
[Service] IIdGenerator idGenerator,
[Service] ITokenSerializer serializer,
[Service] IWorkflowPublisher publisher,
CancellationToken cancellationToken)
{
2020-10-10 15:13:52 +00:00
var workflowDefinition = id != null
? await session.GetWorkflowDefinitionAsync(id, VersionOptions.Latest, cancellationToken)
: default;
if (workflowDefinition == null)
{
2020-10-09 20:26:19 +00:00
workflowDefinition = new WorkflowDefinition
{
2020-10-09 20:26:19 +00:00
WorkflowDefinitionId = idGenerator.Generate(),
WorkflowDefinitionVersionId = idGenerator.Generate(),
Version = 1,
IsLatest = true
};
}
if (workflowInput.Activities != null)
workflowDefinition.Activities = workflowInput.Activities.Select(ToActivityDefinition).ToList();
if (workflowInput.Connections != null)
workflowDefinition.Connections = workflowInput.Connections;
if (workflowInput.Description != null)
workflowDefinition.Description = workflowInput.Description.Trim();
if (workflowInput.Name != null)
workflowDefinition.Name = workflowInput.Name.Trim();
2020-10-10 15:13:52 +00:00
if (workflowInput.IsEnabled != null)
workflowDefinition.IsEnabled = workflowInput.IsEnabled.Value;
if (workflowInput.IsSingleton != null)
workflowDefinition.IsSingleton = workflowInput.IsSingleton.Value;
if (workflowInput.DeleteCompletedInstances != null)
workflowDefinition.DeleteCompletedInstances = workflowInput.DeleteCompletedInstances.Value;
if (workflowInput.Variables != null)
workflowDefinition.Variables = serializer.Deserialize<Variables>(workflowInput.Variables);
if (workflowInput.PersistenceBehavior != null)
workflowDefinition.PersistenceBehavior = workflowInput.PersistenceBehavior.Value;
if (saveAction == WorkflowSaveAction.Publish)
workflowDefinition = await publisher.PublishAsync(workflowDefinition, cancellationToken);
else
workflowDefinition = await publisher.SaveDraftAsync(workflowDefinition, cancellationToken);
return workflowDefinition;
}
public async Task<int> DeleteWorkflowDefinition(
string id,
2020-10-10 15:13:52 +00:00
[Service] ISession session,
CancellationToken cancellationToken)
{
2020-10-10 15:13:52 +00:00
var workflowDefinitions = await session.QueryWorkflowDefinitionByIdAndVersion(id, VersionOptions.All)
.ListAsync()
.ToList();
foreach (var workflowDefinition in workflowDefinitions)
session.Delete(workflowDefinition);
return workflowDefinitions.Count;
}
2020-10-10 15:13:52 +00:00
private ActivityDefinition ToActivityDefinition(ActivityDefinitionInput source) =>
_mapper.Map<ActivityDefinition>(source);
}
}