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.
This commit is contained in:
parent
e151810600
commit
166c1bc117
|
|
@ -15,4 +15,8 @@
|
|||
<ProjectReference Include="..\Elsa.Workflows.Runtime\Elsa.Workflows.Runtime.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Folder Include="Endpoints\CommitStrategies\Workflows\" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,28 @@
|
|||
using Elsa.Abstractions;
|
||||
using Elsa.Models;
|
||||
using Elsa.Workflows.CommitStates;
|
||||
|
||||
namespace Elsa.Workflows.Api.Endpoints.CommitStrategies.Activities.List;
|
||||
|
||||
/// <summary>
|
||||
/// Represents an API endpoint that provides a list of registered workflow commit strategies.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 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.
|
||||
/// </remarks>
|
||||
internal class List(ICommitStrategyRegistry registry) : ElsaEndpointWithoutRequest<ListResponse<ActivityCommitStrategyRegistration>>
|
||||
{
|
||||
public override void Configure()
|
||||
{
|
||||
Get("/descriptors/commit-strategies/activities");
|
||||
ConfigurePermissions("read:commit-strategies");
|
||||
}
|
||||
|
||||
public override Task<ListResponse<ActivityCommitStrategyRegistration>> ExecuteAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
var descriptors = registry.ListActivityStrategyRegistrations().ToList();
|
||||
var response =new ListResponse<ActivityCommitStrategyRegistration>(descriptors);
|
||||
return Task.FromResult(response);
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
|
||||
/// <summary>
|
||||
/// Returns list of available <see cref="IIncidentStrategy" /> implementations.
|
||||
/// </summary>
|
||||
internal class List(IEnumerable<IIncidentStrategy> strategies) : ElsaEndpointWithoutRequest<ListResponse<IncidentStrategyDescriptor>>
|
||||
{
|
||||
public override void Configure()
|
||||
{
|
||||
Get("/descriptors/incident-strategies");
|
||||
ConfigurePermissions("read:incident-strategies");
|
||||
}
|
||||
|
||||
public override Task<ListResponse<IncidentStrategyDescriptor>> ExecuteAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
var descriptors = strategies.Select(IncidentStrategyDescriptor.FromStrategy).OrderBy(x => x.DisplayName).ToList();
|
||||
var response =new ListResponse<IncidentStrategyDescriptor>(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<DisplayNameAttribute>();
|
||||
var descriptionAttribute = type.GetCustomAttribute<DescriptionAttribute>();
|
||||
var displayAttribute = type.GetCustomAttribute<DisplayAttribute>();
|
||||
var displayName = displayNameAttribute?.DisplayName ?? displayAttribute?.Name ?? type.Name.Replace("Strategy", "").Humanize();
|
||||
var description = descriptionAttribute?.Description ?? displayAttribute?.Description ?? "";
|
||||
|
||||
return new IncidentStrategyDescriptor(displayName, description, type.GetSimpleAssemblyQualifiedName());
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
using Elsa.Abstractions;
|
||||
using Elsa.Models;
|
||||
using Elsa.Workflows.CommitStates;
|
||||
|
||||
namespace Elsa.Workflows.Api.Endpoints.CommitStrategies.Workflows.List;
|
||||
|
||||
/// <summary>
|
||||
/// Represents an API endpoint that provides a list of registered workflow commit strategies.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 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.
|
||||
/// </remarks>
|
||||
internal class List(ICommitStrategyRegistry registry) : ElsaEndpointWithoutRequest<ListResponse<WorkflowCommitStrategyRegistration>>
|
||||
{
|
||||
public override void Configure()
|
||||
{
|
||||
Get("/descriptors/commit-strategies/workflows");
|
||||
ConfigurePermissions("read:commit-strategies");
|
||||
}
|
||||
|
||||
public override Task<ListResponse<WorkflowCommitStrategyRegistration>> ExecuteAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
var descriptors = registry.ListWorkflowStrategyRegistrations().ToList();
|
||||
var response =new ListResponse<WorkflowCommitStrategyRegistration>(descriptors);
|
||||
return Task.FromResult(response);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue