From 8804dda4675aa47b85ff1d952165940d5fb522a2 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 4 Sep 2026 21:39:25 +0000 Subject: [PATCH 1/5] Initial plan From 4efdf5fbffa3839baa57b3697ab0361d51224515 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 4 Sep 2026 21:40:45 +0000 Subject: [PATCH 2/5] Update FastEndpoints and empty resume request Co-authored-by: sfmskywalker <938393+sfmskywalker@users.noreply.github.com> --- Directory.Packages.props | 6 +++--- .../Elsa.Workflows.Api/Endpoints/RuntimeAdmin/Models.cs | 5 ----- .../Endpoints/RuntimeAdmin/Resume/Endpoint.cs | 4 ++-- 3 files changed, 5 insertions(+), 10 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index 20652091a..a90908726 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -47,9 +47,9 @@ - - - + + + diff --git a/src/modules/Elsa.Workflows.Api/Endpoints/RuntimeAdmin/Models.cs b/src/modules/Elsa.Workflows.Api/Endpoints/RuntimeAdmin/Models.cs index c73e1a421..f7f4c45e9 100644 --- a/src/modules/Elsa.Workflows.Api/Endpoints/RuntimeAdmin/Models.cs +++ b/src/modules/Elsa.Workflows.Api/Endpoints/RuntimeAdmin/Models.cs @@ -8,11 +8,6 @@ public class PauseRequest public string? Reason { get; set; } } -/// Body for the resume endpoint. No fields today — kept as a class so the endpoint signature is uniform. -public class ResumeRequest -{ -} - /// Body for the operator-force drain endpoint. public class ForceDrainRequest { diff --git a/src/modules/Elsa.Workflows.Api/Endpoints/RuntimeAdmin/Resume/Endpoint.cs b/src/modules/Elsa.Workflows.Api/Endpoints/RuntimeAdmin/Resume/Endpoint.cs index dc247513a..3061a991b 100644 --- a/src/modules/Elsa.Workflows.Api/Endpoints/RuntimeAdmin/Resume/Endpoint.cs +++ b/src/modules/Elsa.Workflows.Api/Endpoints/RuntimeAdmin/Resume/Endpoint.cs @@ -12,7 +12,7 @@ namespace Elsa.Workflows.Api.Endpoints.RuntimeAdmin.Resume; /// Idempotent on the success path. /// [PublicAPI] -internal sealed class ResumeEndpoint(IWorkflowRuntimeAdminService admin) : ElsaEndpoint +internal sealed class ResumeEndpoint(IWorkflowRuntimeAdminService admin) : ElsaEndpoint { public override void Configure() { @@ -20,7 +20,7 @@ internal sealed class ResumeEndpoint(IWorkflowRuntimeAdminService admin) : ElsaE ConfigurePermissions(PermissionNames.ManageWorkflowRuntime); } - public override async Task HandleAsync(ResumeRequest req, CancellationToken ct) + public override async Task HandleAsync(EmptyRequest req, CancellationToken ct) { var status = admin.GetStatus(); if ((status.State.Reason & QuiescenceReason.Drain) != 0) From 750549c797f05d2aa78994a089e59ae0081be399 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 4 Sep 2026 21:41:56 +0000 Subject: [PATCH 3/5] Use FastEndpoints empty-request endpoint base Co-authored-by: sfmskywalker <938393+sfmskywalker@users.noreply.github.com> --- .../Endpoints/RuntimeAdmin/Resume/Endpoint.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/Elsa.Workflows.Api/Endpoints/RuntimeAdmin/Resume/Endpoint.cs b/src/modules/Elsa.Workflows.Api/Endpoints/RuntimeAdmin/Resume/Endpoint.cs index 3061a991b..11c3acab4 100644 --- a/src/modules/Elsa.Workflows.Api/Endpoints/RuntimeAdmin/Resume/Endpoint.cs +++ b/src/modules/Elsa.Workflows.Api/Endpoints/RuntimeAdmin/Resume/Endpoint.cs @@ -12,7 +12,7 @@ namespace Elsa.Workflows.Api.Endpoints.RuntimeAdmin.Resume; /// Idempotent on the success path. /// [PublicAPI] -internal sealed class ResumeEndpoint(IWorkflowRuntimeAdminService admin) : ElsaEndpoint +internal sealed class ResumeEndpoint(IWorkflowRuntimeAdminService admin) : ElsaEndpointWithoutRequest { public override void Configure() { From 016ffe5d8d36d93a8dd3beb7fcbf0afac0ed38af Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 4 Sep 2026 21:43:29 +0000 Subject: [PATCH 4/5] Allow FastEndpoints EmptyRequest in Elsa endpoint wrappers Co-authored-by: sfmskywalker <938393+sfmskywalker@users.noreply.github.com> --- src/common/Elsa.Api.Common/Abstractions/Endpoints.cs | 6 +++--- .../Endpoints/RuntimeAdmin/Resume/Endpoint.cs | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/common/Elsa.Api.Common/Abstractions/Endpoints.cs b/src/common/Elsa.Api.Common/Abstractions/Endpoints.cs index 82b6049f9..dd075a919 100644 --- a/src/common/Elsa.Api.Common/Abstractions/Endpoints.cs +++ b/src/common/Elsa.Api.Common/Abstractions/Endpoints.cs @@ -38,7 +38,7 @@ public abstract class ElsaEndpointWithoutRequest : EndpointWithoutReq } } -public class ElsaEndpoint : Endpoint where TRequest : notnull, new() where TResponse : notnull +public class ElsaEndpoint : Endpoint where TRequest : notnull where TResponse : notnull { protected void ConfigurePermissions(params string[] permissions) { @@ -49,7 +49,7 @@ public class ElsaEndpoint : Endpoint w } } -public class ElsaEndpoint : Endpoint where TRequest : notnull, new() where TResponse : notnull where TMapper : class, IMapper, new() +public class ElsaEndpoint : Endpoint where TRequest : notnull where TResponse : notnull where TMapper : class, IMapper, new() { protected void ConfigurePermissions(params string[] permissions) { @@ -60,7 +60,7 @@ public class ElsaEndpoint : Endpoint : Endpoint where TRequest : notnull, new() +public class ElsaEndpoint : Endpoint where TRequest : notnull { protected void ConfigurePermissions(params string[] permissions) { diff --git a/src/modules/Elsa.Workflows.Api/Endpoints/RuntimeAdmin/Resume/Endpoint.cs b/src/modules/Elsa.Workflows.Api/Endpoints/RuntimeAdmin/Resume/Endpoint.cs index 11c3acab4..3061a991b 100644 --- a/src/modules/Elsa.Workflows.Api/Endpoints/RuntimeAdmin/Resume/Endpoint.cs +++ b/src/modules/Elsa.Workflows.Api/Endpoints/RuntimeAdmin/Resume/Endpoint.cs @@ -12,7 +12,7 @@ namespace Elsa.Workflows.Api.Endpoints.RuntimeAdmin.Resume; /// Idempotent on the success path. /// [PublicAPI] -internal sealed class ResumeEndpoint(IWorkflowRuntimeAdminService admin) : ElsaEndpointWithoutRequest +internal sealed class ResumeEndpoint(IWorkflowRuntimeAdminService admin) : ElsaEndpoint { public override void Configure() { From e7debff3f2c9318feefd261b406ccf0637e3ae03 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 4 Sep 2026 22:37:05 +0000 Subject: [PATCH 5/5] Address resume endpoint review feedback Co-authored-by: sfmskywalker <938393+sfmskywalker@users.noreply.github.com> --- .../Elsa.Workflows.Api/Endpoints/RuntimeAdmin/Models.cs | 6 ++++++ .../Endpoints/RuntimeAdmin/Resume/Endpoint.cs | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/modules/Elsa.Workflows.Api/Endpoints/RuntimeAdmin/Models.cs b/src/modules/Elsa.Workflows.Api/Endpoints/RuntimeAdmin/Models.cs index f7f4c45e9..b3d35dda1 100644 --- a/src/modules/Elsa.Workflows.Api/Endpoints/RuntimeAdmin/Models.cs +++ b/src/modules/Elsa.Workflows.Api/Endpoints/RuntimeAdmin/Models.cs @@ -8,6 +8,12 @@ public class PauseRequest public string? Reason { get; set; } } +/// Body for the resume endpoint. +[Obsolete("Use FastEndpoints.EmptyRequest instead.")] +public class ResumeRequest +{ +} + /// Body for the operator-force drain endpoint. public class ForceDrainRequest { diff --git a/src/modules/Elsa.Workflows.Api/Endpoints/RuntimeAdmin/Resume/Endpoint.cs b/src/modules/Elsa.Workflows.Api/Endpoints/RuntimeAdmin/Resume/Endpoint.cs index 3061a991b..981b61825 100644 --- a/src/modules/Elsa.Workflows.Api/Endpoints/RuntimeAdmin/Resume/Endpoint.cs +++ b/src/modules/Elsa.Workflows.Api/Endpoints/RuntimeAdmin/Resume/Endpoint.cs @@ -20,7 +20,7 @@ internal sealed class ResumeEndpoint(IWorkflowRuntimeAdminService admin) : ElsaE ConfigurePermissions(PermissionNames.ManageWorkflowRuntime); } - public override async Task HandleAsync(EmptyRequest req, CancellationToken ct) + public override async Task HandleAsync(EmptyRequest _, CancellationToken ct) { var status = admin.GetStatus(); if ((status.State.Reason & QuiescenceReason.Drain) != 0)