From 3f979a9f1922d2d6b40de36f1bf03a10fc7c35a0 Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Fri, 16 Jun 2023 13:32:15 +0200 Subject: [PATCH] Update API client with support for saving workflow definitions --- .../Contracts/IWorkflowDefinitionsApi.cs | 9 +++ .../Models/SaveWorkflowDefinitionRequest.cs | 18 +++++ .../Models/VariableDefinition.cs | 14 ++++ .../Models/WorkflowDefinitionModel.cs | 65 +++++++++++++++++++ 4 files changed, 106 insertions(+) create mode 100644 src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/SaveWorkflowDefinitionRequest.cs create mode 100644 src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/VariableDefinition.cs create mode 100644 src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/WorkflowDefinitionModel.cs diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Contracts/IWorkflowDefinitionsApi.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Contracts/IWorkflowDefinitionsApi.cs index f13d5fc6f..c8354f5fd 100644 --- a/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Contracts/IWorkflowDefinitionsApi.cs +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Contracts/IWorkflowDefinitionsApi.cs @@ -30,6 +30,15 @@ public interface IWorkflowDefinitionsApi [Get("/workflow-definitions/{definitionId}?versionOptions={VersionOptions}&includeCompositeRoot={includeCompositeRoot}")] Task GetAsync(string definitionId, VersionOptions? versionOptions = default, bool includeCompositeRoot = false, CancellationToken cancellationToken = default); + /// + /// Saves a workflow definition. + /// + /// The request containing the workflow definition to save. + /// The cancellation token. + /// The workflow definition. + [Post("/workflow-definitions")] + Task SaveAsync(SaveWorkflowDefinitionRequest request, CancellationToken cancellationToken = default); + /// /// Deletes a workflow definition. /// diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/SaveWorkflowDefinitionRequest.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/SaveWorkflowDefinitionRequest.cs new file mode 100644 index 000000000..980c0423c --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/SaveWorkflowDefinitionRequest.cs @@ -0,0 +1,18 @@ +namespace Elsa.Api.Client.Resources.WorkflowDefinitions.Models +{ + /// + /// Represents a request to save a workflow definition. + /// + public class SaveWorkflowDefinitionRequest + { + /// + /// The workflow definition to save. + /// + public WorkflowDefinitionModel Model { get; set; } = default!; + + /// + /// Whether the workflow definition should be published. + /// + public bool? Publish { get; set; } + } +} diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/VariableDefinition.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/VariableDefinition.cs new file mode 100644 index 000000000..3c2a92e9e --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/VariableDefinition.cs @@ -0,0 +1,14 @@ +namespace Elsa.Api.Client.Resources.WorkflowDefinitions.Models; + +/// +/// Stores information about a workflow variable. +/// +public class VariableDefinition +{ + public string Id { get; set; } + public string Name { get; set; } + public string TypeName { get; set; } + public bool IsArray { get; set; } + public string? Value { get; set; } + public string? StorageDriverTypeName { get; set; } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/WorkflowDefinitionModel.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/WorkflowDefinitionModel.cs new file mode 100644 index 000000000..211dbae25 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/WorkflowDefinitionModel.cs @@ -0,0 +1,65 @@ +using System.Text.Json; +using JetBrains.Annotations; + +namespace Elsa.Api.Client.Resources.WorkflowDefinitions.Models; + +/// +/// Represents a serializable workflow definition. +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// The type of IWorkflowActivationStrategy to apply when new instances are requested to be created. +/// +[PublicAPI] +public record WorkflowDefinitionModel( + string Id, + string DefinitionId, + string? Name, + string? Description, + DateTimeOffset CreatedAt, + int Version, + ICollection? Variables, + ICollection? Inputs, + ICollection? Outputs, + ICollection? Outcomes, + IDictionary? CustomProperties, + bool IsReadonly, + bool IsLatest, + bool IsPublished, + WorkflowOptions? Options, + JsonElement? Root +) +{ + /// + public WorkflowDefinitionModel() : this( + default!, + default!, + default!, + default!, + default!, + default!, + default!, + default!, + default!, + default!, + default!, + default!, + default!, + default!, + default!, + default!) + { + } +} \ No newline at end of file