diff --git a/src/clients/Elsa.Api.Client/Helpers/RefitSettingsHelper.cs b/src/clients/Elsa.Api.Client/Helpers/RefitSettingsHelper.cs index 8a87220a3..fafd23891 100644 --- a/src/clients/Elsa.Api.Client/Helpers/RefitSettingsHelper.cs +++ b/src/clients/Elsa.Api.Client/Helpers/RefitSettingsHelper.cs @@ -1,6 +1,9 @@ using System.Text.Json; using System.Text.Json.Serialization; +using System.Text.Json.Serialization.Metadata; using Elsa.Api.Client.Converters; +using Elsa.Api.Client.Resources.Alterations.Contracts; +using Elsa.Api.Client.Resources.Alterations.Models; using Refit; namespace Elsa.Api.Client; @@ -34,6 +37,27 @@ public static class RefitSettingsHelper options.Converters.Add(new VersionOptionsJsonConverter()); options.Converters.Add(new TypeJsonConverter()); + var alterationTypes = new[] { typeof(Cancel) }; + + options.TypeInfoResolver = new DefaultJsonTypeInfoResolver() + .WithAddedModifier(typeInfo => + { + if (typeInfo.Type != typeof(IAlteration)) + return; + + if (typeInfo.Kind != JsonTypeInfoKind.Object) + return; + + var polymorphismOptions = new JsonPolymorphismOptions { TypeDiscriminatorPropertyName = "type" }; + + foreach (var alterationType in alterationTypes.ToList()) + { + polymorphismOptions.DerivedTypes.Add(new(alterationType, alterationType.Name)); + } + + typeInfo.PolymorphismOptions = polymorphismOptions; + }); + configureJsonSerializerOptions?.Invoke(serviceProvider, options); return options; diff --git a/src/clients/Elsa.Api.Client/Resources/Alterations/Models/Cancel.cs b/src/clients/Elsa.Api.Client/Resources/Alterations/Models/Cancel.cs new file mode 100644 index 000000000..45b2c836d --- /dev/null +++ b/src/clients/Elsa.Api.Client/Resources/Alterations/Models/Cancel.cs @@ -0,0 +1,6 @@ +namespace Elsa.Api.Client.Resources.Alterations.Models; + +/// +/// Cancels the workflow instances in an alteration plan. +/// +public class Cancel : AlterationBase; \ No newline at end of file diff --git a/src/modules/Elsa.Alterations.Core/Serialization/AlterationSerializationOptionConfigurator.cs b/src/modules/Elsa.Alterations.Core/Serialization/AlterationSerializationOptionConfigurator.cs index d5614b6d9..217331a5f 100644 --- a/src/modules/Elsa.Alterations.Core/Serialization/AlterationSerializationOptionConfigurator.cs +++ b/src/modules/Elsa.Alterations.Core/Serialization/AlterationSerializationOptionConfigurator.cs @@ -1,4 +1,3 @@ -using System.Text.Json; using System.Text.Json.Serialization; using System.Text.Json.Serialization.Metadata; using Elsa.Alterations.Core.Contracts; @@ -35,7 +34,7 @@ public class AlterationSerializationOptionConfigurator(IOptions [Browsable(false)] -[Activity("Elsa", "Alterations", "Dispatches jobs for the specified Alteration Plan", Kind = ActivityKind.Job)] +[Activity("Elsa", "Alterations", "Dispatches jobs for the specified Alteration Plan", Kind = ActivityKind.Task)] public class CompleteAlterationPlan : CodeActivity { /// diff --git a/src/modules/Elsa.Alterations/Activities/DispatchAlterationJobs.cs b/src/modules/Elsa.Alterations/Activities/DispatchAlterationJobs.cs index a8c2c6fe5..a22a45652 100644 --- a/src/modules/Elsa.Alterations/Activities/DispatchAlterationJobs.cs +++ b/src/modules/Elsa.Alterations/Activities/DispatchAlterationJobs.cs @@ -15,7 +15,7 @@ namespace Elsa.Alterations.Activities; /// Submits an alteration plan for execution. /// [Browsable(false)] -[Activity("Elsa", "Alterations", "Dispatches jobs for the specified Alteration Plan", Kind = ActivityKind.Job)] +[Activity("Elsa", "Alterations", "Dispatches jobs for the specified Alteration Plan", Kind = ActivityKind.Task)] public class DispatchAlterationJobs : CodeActivity { /// diff --git a/src/modules/Elsa.Alterations/Activities/GenerateAlterationJobs.cs b/src/modules/Elsa.Alterations/Activities/GenerateAlterationJobs.cs index fd2357501..03a68cca5 100644 --- a/src/modules/Elsa.Alterations/Activities/GenerateAlterationJobs.cs +++ b/src/modules/Elsa.Alterations/Activities/GenerateAlterationJobs.cs @@ -20,7 +20,7 @@ namespace Elsa.Alterations.Activities; /// Submits an alteration plan for execution. /// [Browsable(false)] -[Activity("Elsa", "Alterations", "Generates jobs for the specified Alteration Plan", Kind = ActivityKind.Job)] +[Activity("Elsa", "Alterations", "Generates jobs for the specified Alteration Plan", Kind = ActivityKind.Task)] public class GenerateAlterationJobs : CodeActivity { /// diff --git a/src/modules/Elsa.Alterations/AlterationHandlers/CancelHandler.cs b/src/modules/Elsa.Alterations/AlterationHandlers/CancelHandler.cs new file mode 100644 index 000000000..38bc32404 --- /dev/null +++ b/src/modules/Elsa.Alterations/AlterationHandlers/CancelHandler.cs @@ -0,0 +1,22 @@ +using Elsa.Alterations.AlterationTypes; +using Elsa.Alterations.Core.Abstractions; +using Elsa.Alterations.Core.Contexts; +using JetBrains.Annotations; + +namespace Elsa.Alterations.AlterationHandlers; + +/// +/// Upgrades the version of the workflow instance. +/// +[UsedImplicitly] +public class CancelHandler : AlterationHandlerBase +{ + /// + protected override ValueTask HandleAsync(AlterationContext context, Cancel alteration) + { + context.WorkflowExecutionContext.Cancel(); + + context.Succeed(); + return ValueTask.CompletedTask; + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Alterations/AlterationTypes/Cancel.cs b/src/modules/Elsa.Alterations/AlterationTypes/Cancel.cs new file mode 100644 index 000000000..c0a5f7fde --- /dev/null +++ b/src/modules/Elsa.Alterations/AlterationTypes/Cancel.cs @@ -0,0 +1,10 @@ +using Elsa.Alterations.Core.Abstractions; +using JetBrains.Annotations; + +namespace Elsa.Alterations.AlterationTypes; + +/// +/// Cancels the workflow instances in an alteration plan. +/// +[UsedImplicitly] +public class Cancel : AlterationBase; \ No newline at end of file diff --git a/src/modules/Elsa.Alterations/Extensions/ServiceCollectionExtensions.cs b/src/modules/Elsa.Alterations/Extensions/ServiceCollectionExtensions.cs index 76a6818b8..b930d2878 100644 --- a/src/modules/Elsa.Alterations/Extensions/ServiceCollectionExtensions.cs +++ b/src/modules/Elsa.Alterations/Extensions/ServiceCollectionExtensions.cs @@ -20,6 +20,7 @@ public static class ServiceCollectionExtensions services.AddAlteration(); services.AddAlteration(); services.AddAlteration(); + services.AddAlteration(); services.AddNotificationHandlersFrom(); return services; }