From d6481133fd64c541c8a9eea0afc67e0112c4c1b0 Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Fri, 20 Oct 2023 11:36:12 +0200 Subject: [PATCH] Add WorkflowSerializer service for simplifies workflow deserialization --- .../Contracts/IWorkflowSerializer.cs | 16 ++++++++++ .../Features/WorkflowManagementFeature.cs | 1 + .../Services/WorkflowSerializer.cs | 32 +++++++++++++++++++ 3 files changed, 49 insertions(+) create mode 100644 src/modules/Elsa.Workflows.Management/Contracts/IWorkflowSerializer.cs create mode 100644 src/modules/Elsa.Workflows.Management/Services/WorkflowSerializer.cs diff --git a/src/modules/Elsa.Workflows.Management/Contracts/IWorkflowSerializer.cs b/src/modules/Elsa.Workflows.Management/Contracts/IWorkflowSerializer.cs new file mode 100644 index 000000000..2434bffa0 --- /dev/null +++ b/src/modules/Elsa.Workflows.Management/Contracts/IWorkflowSerializer.cs @@ -0,0 +1,16 @@ +using Elsa.Workflows.Core.Activities; + +namespace Elsa.Workflows.Management.Contracts; + +/// +/// Serializes and deserializes workflows. +/// +public interface IWorkflowSerializer +{ + /// + /// Serializes the specified workflow. + /// + /// The data representing the workflow. + /// A deserialized workflow. + Workflow Deserialize(string serializedWorkflow); +} \ No newline at end of file diff --git a/src/modules/Elsa.Workflows.Management/Features/WorkflowManagementFeature.cs b/src/modules/Elsa.Workflows.Management/Features/WorkflowManagementFeature.cs index 00b7287de..aca2cbc0a 100644 --- a/src/modules/Elsa.Workflows.Management/Features/WorkflowManagementFeature.cs +++ b/src/modules/Elsa.Workflows.Management/Features/WorkflowManagementFeature.cs @@ -159,6 +159,7 @@ public class WorkflowManagementFeature : FeatureBase .AddMemoryStore() .AddActivityProvider() .AddSingleton() + .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() diff --git a/src/modules/Elsa.Workflows.Management/Services/WorkflowSerializer.cs b/src/modules/Elsa.Workflows.Management/Services/WorkflowSerializer.cs new file mode 100644 index 000000000..1ed5b184d --- /dev/null +++ b/src/modules/Elsa.Workflows.Management/Services/WorkflowSerializer.cs @@ -0,0 +1,32 @@ +using Elsa.Workflows.Core.Activities; +using Elsa.Workflows.Core.Contracts; +using Elsa.Workflows.Management.Contracts; +using Elsa.Workflows.Management.Mappers; +using Elsa.Workflows.Management.Models; + +namespace Elsa.Workflows.Management.Services; + +/// +/// A serializer that parses JSON. +/// +public class WorkflowSerializer : IWorkflowSerializer +{ + private readonly IApiSerializer _apiSerializer; + private readonly WorkflowDefinitionMapper _workflowDefinitionMapper; + + /// + /// Initializes a new instance of the class. + /// + public WorkflowSerializer(IApiSerializer apiSerializer, WorkflowDefinitionMapper workflowDefinitionMapper) + { + _apiSerializer = apiSerializer; + _workflowDefinitionMapper = workflowDefinitionMapper; + } + + /// + public Workflow Deserialize(string serializedWorkflow) + { + var model = _apiSerializer.Deserialize(serializedWorkflow); + return _workflowDefinitionMapper.Map(model); + } +} \ No newline at end of file