Prevent composite root activities from being returned after POST and PUBLISH
This commit is contained in:
parent
dd919a4000
commit
3045725790
|
|
@ -10,7 +10,9 @@ using JetBrains.Annotations;
|
|||
using Medallion.Threading;
|
||||
using System.Text.Json;
|
||||
using Elsa.Workflows.Api.Mappers;
|
||||
using Elsa.Workflows.Core.Serialization.Converters;
|
||||
using Elsa.Workflows.Management.Contracts;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
|
||||
namespace Elsa.Workflows.Api.Endpoints.WorkflowDefinitions.Post;
|
||||
|
||||
|
|
@ -46,7 +48,7 @@ internal class Post : ElsaEndpoint<WorkflowDefinitionRequest, WorkflowDefinition
|
|||
var resourceName = $"{GetType().FullName}:{(!string.IsNullOrWhiteSpace(definitionId) ? definitionId : Guid.NewGuid().ToString())}";
|
||||
|
||||
await using var handle = await _distributedLockProvider.AcquireLockAsync(resourceName, TimeSpan.FromMinutes(1), cancellationToken);
|
||||
|
||||
|
||||
var draft = !string.IsNullOrWhiteSpace(definitionId)
|
||||
? await _workflowDefinitionPublisher.GetDraftAsync(definitionId, VersionOptions.Latest, cancellationToken)
|
||||
: default;
|
||||
|
|
@ -89,6 +91,12 @@ internal class Post : ElsaEndpoint<WorkflowDefinitionRequest, WorkflowDefinition
|
|||
if (isNew)
|
||||
await SendCreatedAtAsync<Get.Get>(new { definitionId }, response, cancellation: cancellationToken);
|
||||
else
|
||||
await SendOkAsync(response, cancellationToken);
|
||||
{
|
||||
// We do not want to include composite root activities in the response.
|
||||
var apiSerializerOptions = _serializerOptionsProvider.CreateApiOptions();
|
||||
apiSerializerOptions.Converters.Add(new JsonIgnoreCompositeRootConverterFactory());
|
||||
|
||||
await HttpContext.Response.WriteAsJsonAsync(response, serializerOptions, cancellationToken);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -2,19 +2,26 @@ using Elsa.Abstractions;
|
|||
using Elsa.Common.Models;
|
||||
using Elsa.Workflows.Api.Mappers;
|
||||
using Elsa.Workflows.Api.Models;
|
||||
using Elsa.Workflows.Core.Serialization;
|
||||
using Elsa.Workflows.Core.Serialization.Converters;
|
||||
using Elsa.Workflows.Management.Contracts;
|
||||
using JetBrains.Annotations;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
|
||||
namespace Elsa.Workflows.Api.Endpoints.WorkflowDefinitions.Publish;
|
||||
|
||||
[PublicAPI]
|
||||
internal class Publish : ElsaEndpoint<Request, WorkflowDefinitionResponse, WorkflowDefinitionMapper>
|
||||
{
|
||||
private readonly IWorkflowDefinitionStore _store;
|
||||
private readonly IWorkflowDefinitionPublisher _workflowDefinitionPublisher;
|
||||
private readonly SerializerOptionsProvider _serializerOptionsProvider;
|
||||
|
||||
public Publish(IWorkflowDefinitionStore store, IWorkflowDefinitionPublisher workflowDefinitionPublisher)
|
||||
public Publish(IWorkflowDefinitionStore store, IWorkflowDefinitionPublisher workflowDefinitionPublisher, SerializerOptionsProvider serializerOptionsProvider)
|
||||
{
|
||||
_store = store;
|
||||
_workflowDefinitionPublisher = workflowDefinitionPublisher;
|
||||
_serializerOptionsProvider = serializerOptionsProvider;
|
||||
}
|
||||
|
||||
public override void Configure()
|
||||
|
|
@ -30,7 +37,7 @@ internal class Publish : ElsaEndpoint<Request, WorkflowDefinitionResponse, Workf
|
|||
DefinitionId = request.DefinitionId,
|
||||
VersionOptions = VersionOptions.Latest
|
||||
};
|
||||
|
||||
|
||||
var definition = await _store.FindAsync(filter, cancellationToken);
|
||||
|
||||
if (definition == null)
|
||||
|
|
@ -49,6 +56,11 @@ internal class Publish : ElsaEndpoint<Request, WorkflowDefinitionResponse, Workf
|
|||
await _workflowDefinitionPublisher.PublishAsync(definition, cancellationToken);
|
||||
|
||||
var response = await Map.FromEntityAsync(definition, cancellationToken);
|
||||
await SendOkAsync(response, cancellationToken);
|
||||
|
||||
// We do not want to include composite root activities in the response.
|
||||
var serializerOptions = _serializerOptionsProvider.CreateApiOptions();
|
||||
serializerOptions.Converters.Add(new JsonIgnoreCompositeRootConverterFactory());
|
||||
|
||||
await HttpContext.Response.WriteAsJsonAsync(response, serializerOptions, cancellationToken);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue