From 166c1bc11702a4856df779cd3a43dfd2ed79ca75 Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Thu, 30 Jan 2025 15:19:51 +0100 Subject: [PATCH] Add endpoints for listing workflow commit strategies Introduced two API endpoints to list activity and workflow commit strategy registrations. Updated the project file to include the new directory structure for the endpoints. These endpoints provide unified responses from the respective registry implementations. --- .../Elsa.Workflows.Api.csproj | 4 ++ .../Activities/List/Endpoint.cs | 28 ++++++++++++ .../CommitStrategies/List/Endpoint.cs | 43 ------------------- .../Workflows/List/Endpoint.cs | 28 ++++++++++++ 4 files changed, 60 insertions(+), 43 deletions(-) create mode 100644 src/modules/Elsa.Workflows.Api/Endpoints/CommitStrategies/Activities/List/Endpoint.cs delete mode 100644 src/modules/Elsa.Workflows.Api/Endpoints/CommitStrategies/List/Endpoint.cs create mode 100644 src/modules/Elsa.Workflows.Api/Endpoints/CommitStrategies/Workflows/List/Endpoint.cs diff --git a/src/modules/Elsa.Workflows.Api/Elsa.Workflows.Api.csproj b/src/modules/Elsa.Workflows.Api/Elsa.Workflows.Api.csproj index 4fff95dc9..94828c0a3 100644 --- a/src/modules/Elsa.Workflows.Api/Elsa.Workflows.Api.csproj +++ b/src/modules/Elsa.Workflows.Api/Elsa.Workflows.Api.csproj @@ -15,4 +15,8 @@ + + + + diff --git a/src/modules/Elsa.Workflows.Api/Endpoints/CommitStrategies/Activities/List/Endpoint.cs b/src/modules/Elsa.Workflows.Api/Endpoints/CommitStrategies/Activities/List/Endpoint.cs new file mode 100644 index 000000000..c7383256a --- /dev/null +++ b/src/modules/Elsa.Workflows.Api/Endpoints/CommitStrategies/Activities/List/Endpoint.cs @@ -0,0 +1,28 @@ +using Elsa.Abstractions; +using Elsa.Models; +using Elsa.Workflows.CommitStates; + +namespace Elsa.Workflows.Api.Endpoints.CommitStrategies.Activities.List; + +/// +/// Represents an API endpoint that provides a list of registered workflow commit strategies. +/// +/// +/// This class is an implementation of an endpoint that retrieves a collection of workflow commit strategy registrations +/// from a provided registry and returns them in a unified response. +/// +internal class List(ICommitStrategyRegistry registry) : ElsaEndpointWithoutRequest> +{ + public override void Configure() + { + Get("/descriptors/commit-strategies/activities"); + ConfigurePermissions("read:commit-strategies"); + } + + public override Task> ExecuteAsync(CancellationToken cancellationToken) + { + var descriptors = registry.ListActivityStrategyRegistrations().ToList(); + var response =new ListResponse(descriptors); + return Task.FromResult(response); + } +} \ No newline at end of file diff --git a/src/modules/Elsa.Workflows.Api/Endpoints/CommitStrategies/List/Endpoint.cs b/src/modules/Elsa.Workflows.Api/Endpoints/CommitStrategies/List/Endpoint.cs deleted file mode 100644 index 2828013ca..000000000 --- a/src/modules/Elsa.Workflows.Api/Endpoints/CommitStrategies/List/Endpoint.cs +++ /dev/null @@ -1,43 +0,0 @@ -using System.ComponentModel; -using System.ComponentModel.DataAnnotations; -using System.Reflection; -using Elsa.Abstractions; -using Elsa.Extensions; -using Elsa.Models; -using Humanizer; - -namespace Elsa.Workflows.Api.Endpoints.CommitStrategies.List; - -/// -/// Returns list of available implementations. -/// -internal class List(IEnumerable strategies) : ElsaEndpointWithoutRequest> -{ - public override void Configure() - { - Get("/descriptors/incident-strategies"); - ConfigurePermissions("read:incident-strategies"); - } - - public override Task> ExecuteAsync(CancellationToken cancellationToken) - { - var descriptors = strategies.Select(IncidentStrategyDescriptor.FromStrategy).OrderBy(x => x.DisplayName).ToList(); - var response =new ListResponse(descriptors); - return Task.FromResult(response); - } -} - -internal record IncidentStrategyDescriptor(string DisplayName, string Description, string TypeName) -{ - public static IncidentStrategyDescriptor FromStrategy(IIncidentStrategy strategy) - { - var type = strategy.GetType(); - var displayNameAttribute = type.GetCustomAttribute(); - var descriptionAttribute = type.GetCustomAttribute(); - var displayAttribute = type.GetCustomAttribute(); - var displayName = displayNameAttribute?.DisplayName ?? displayAttribute?.Name ?? type.Name.Replace("Strategy", "").Humanize(); - var description = descriptionAttribute?.Description ?? displayAttribute?.Description ?? ""; - - return new IncidentStrategyDescriptor(displayName, description, type.GetSimpleAssemblyQualifiedName()); - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Workflows.Api/Endpoints/CommitStrategies/Workflows/List/Endpoint.cs b/src/modules/Elsa.Workflows.Api/Endpoints/CommitStrategies/Workflows/List/Endpoint.cs new file mode 100644 index 000000000..3ee03c549 --- /dev/null +++ b/src/modules/Elsa.Workflows.Api/Endpoints/CommitStrategies/Workflows/List/Endpoint.cs @@ -0,0 +1,28 @@ +using Elsa.Abstractions; +using Elsa.Models; +using Elsa.Workflows.CommitStates; + +namespace Elsa.Workflows.Api.Endpoints.CommitStrategies.Workflows.List; + +/// +/// Represents an API endpoint that provides a list of registered workflow commit strategies. +/// +/// +/// This class is an implementation of an endpoint that retrieves a collection of workflow commit strategy registrations +/// from a provided registry and returns them in a unified response. +/// +internal class List(ICommitStrategyRegistry registry) : ElsaEndpointWithoutRequest> +{ + public override void Configure() + { + Get("/descriptors/commit-strategies/workflows"); + ConfigurePermissions("read:commit-strategies"); + } + + public override Task> ExecuteAsync(CancellationToken cancellationToken) + { + var descriptors = registry.ListWorkflowStrategyRegistrations().ToList(); + var response =new ListResponse(descriptors); + return Task.FromResult(response); + } +} \ No newline at end of file