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 66ec28614..227ce2e78 100644
--- a/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Contracts/IWorkflowDefinitionsApi.cs
+++ b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Contracts/IWorkflowDefinitionsApi.cs
@@ -61,6 +61,22 @@ public interface IWorkflowDefinitionsApi
/// The cancellation token.
[Delete("/workflow-definitions/{definitionId}")]
Task DeleteAsync(string definitionId, CancellationToken cancellationToken = default);
+
+ ///
+ /// Publishes a workflow definition.
+ ///
+ /// The ID of the workflow definition to publish.
+ /// The cancellation token.
+ [Post("/workflow-definitions/{definitionId}/publish")]
+ Task PublishAsync(string definitionId, CancellationToken cancellationToken = default);
+
+ ///
+ /// Retracts a workflow definition.
+ ///
+ /// The ID of the workflow definition to retract.
+ /// The cancellation token.
+ [Post("/workflow-definitions/{definitionId}/retract")]
+ Task RetractAsync(string definitionId, CancellationToken cancellationToken = default);
///
/// Deletes many workflow definitions.
@@ -78,6 +94,14 @@ public interface IWorkflowDefinitionsApi
[Post("/bulk-actions/publish/workflow-definitions/by-definition-ids")]
Task BulkPublishAsync(BulkPublishWorkflowDefinitionsRequest request, CancellationToken cancellationToken = default);
+ ///
+ /// Retracts many workflow definitions.
+ ///
+ /// The request containing the IDs of the workflow definitions to retract.
+ /// The cancellation token.
+ [Post("/bulk-actions/retract/workflow-definitions/by-definition-ids")]
+ Task BulkRetractAsync(BulkRetractWorkflowDefinitionsRequest request, CancellationToken cancellationToken = default);
+
///
/// Exports a workflow definition.
///
diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/BulkPublishWorkflowDefinitionsRequest.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/BulkPublishWorkflowDefinitionsRequest.cs
index fef97abe9..527761704 100644
--- a/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/BulkPublishWorkflowDefinitionsRequest.cs
+++ b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/BulkPublishWorkflowDefinitionsRequest.cs
@@ -6,9 +6,9 @@ namespace Elsa.Api.Client.Resources.WorkflowDefinitions.Models;
public class BulkPublishWorkflowDefinitionsRequest
{
///
- /// Initializes a new instance of the class.
+ /// Initializes a new instance of the class.
///
- /// The IDs of the workflow definitions to delete.
+ /// The IDs of the workflow definitions to publish.
public BulkPublishWorkflowDefinitionsRequest(IEnumerable definitionIds)
{
DefinitionIds = definitionIds.ToArray();
diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/BulkRetractWorkflowDefinitionsRequest.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/BulkRetractWorkflowDefinitionsRequest.cs
new file mode 100644
index 000000000..fdd270aa1
--- /dev/null
+++ b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/BulkRetractWorkflowDefinitionsRequest.cs
@@ -0,0 +1,21 @@
+namespace Elsa.Api.Client.Resources.WorkflowDefinitions.Models;
+
+///
+/// A request to retract many workflow definitions.
+///
+public class BulkRetractWorkflowDefinitionsRequest
+{
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// The IDs of the workflow definitions to retract.
+ public BulkRetractWorkflowDefinitionsRequest(IEnumerable definitionIds)
+ {
+ DefinitionIds = definitionIds.ToArray();
+ }
+
+ ///
+ /// Gets or sets the IDs of the workflow definitions to delete.
+ ///
+ public string[] DefinitionIds { get; set; }
+}
\ No newline at end of file
diff --git a/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/BulkRetractWorkflowDefinitionsResponse.cs b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/BulkRetractWorkflowDefinitionsResponse.cs
new file mode 100644
index 000000000..5a8638a0c
--- /dev/null
+++ b/src/clients/Elsa.Api.Client/Resources/WorkflowDefinitions/Models/BulkRetractWorkflowDefinitionsResponse.cs
@@ -0,0 +1,9 @@
+namespace Elsa.Api.Client.Resources.WorkflowDefinitions.Models;
+
+///
+/// The response from a request to publish workflow definitions.
+///
+public record BulkRetractWorkflowDefinitionsResponse(
+ ICollection Retracted,
+ ICollection AlreadyRetracted,
+ ICollection NotFound);
\ No newline at end of file
diff --git a/src/modules/Elsa.Workflows.Api/Endpoints/WorkflowDefinitions/BulkRetract/Models.cs b/src/modules/Elsa.Workflows.Api/Endpoints/WorkflowDefinitions/BulkRetract/Models.cs
index 945486de3..307b7e2ef 100644
--- a/src/modules/Elsa.Workflows.Api/Endpoints/WorkflowDefinitions/BulkRetract/Models.cs
+++ b/src/modules/Elsa.Workflows.Api/Endpoints/WorkflowDefinitions/BulkRetract/Models.cs
@@ -1,20 +1,25 @@
namespace Elsa.Workflows.Api.Endpoints.WorkflowDefinitions.BulkRetract;
-public class Request
+internal class Request
{
public ICollection DefinitionIds { get; set; } = default!;
}
-public class Response
+internal class Response
{
- public Response(ICollection retracted, ICollection notPublished, ICollection notFound)
+ public Response(ICollection retracted, ICollection alreadyRetracted, ICollection notFound)
{
Retracted = retracted;
- NotPublished = notPublished;
+ AlreadyRetracted = alreadyRetracted;
+ NotPublished = alreadyRetracted;
NotFound = notFound;
}
public ICollection Retracted { get; }
+ public ICollection AlreadyRetracted { get; }
+
+ [Obsolete("Use AlreadyRetracted instead")]
public ICollection NotPublished { get; }
+
public ICollection NotFound { get; }
}
\ No newline at end of file