Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -56,11 +56,4 @@ public override async Task HandleAsync(Request request, CancellationToken cancel
{
return await _workflowDefinitionService.FindWorkflowGraphAsync(workflowDefinitionId, VersionOptions.Latest, cancellationToken);
}
}

internal record Request(string WorkflowDefinitionId, string? ActivityTypeName, string? PropertyName)
{
public Request() : this(default!, default!, default)
{
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
namespace Elsa.Expressions.JavaScript.Endpoints.TypeDefinitions;

internal record Request(string WorkflowDefinitionId, string? ActivityTypeName, string? PropertyName)
{
public Request() : this(default!, default!, default)
{
}
}
Original file line number Diff line number Diff line change
@@ -1,21 +1,22 @@
using Elsa.Abstractions;
using Elsa.Common.Models;
using Elsa.Workflows.Api.Models;
using Elsa.Workflows.Management;
using Elsa.Workflows.Models;
using JetBrains.Annotations;

namespace Elsa.Workflows.Api.Endpoints.WorkflowDefinitions.GetByDefinitionId;

[PublicAPI]
internal class GetByDefinitionId(IWorkflowDefinitionStore store, IWorkflowDefinitionLinker linker) : ElsaEndpoint<Request>
internal class GetByDefinitionId(IWorkflowDefinitionStore store, IWorkflowDefinitionLinker linker) : ElsaEndpoint<Request, LinkedWorkflowDefinitionModel>
{
public override void Configure()
{
Get("/workflow-definitions/by-definition-id/{definitionId}", "/workflow-definitions/{definitionId}");
ConfigurePermissions("read:workflow-definitions");
}

public override async Task HandleAsync(Request request, CancellationToken cancellationToken)
public override async Task<LinkedWorkflowDefinitionModel> ExecuteAsync(Request request, CancellationToken cancellationToken)
{
var versionOptions = request.VersionOptions != null ? VersionOptions.FromString(request.VersionOptions) : VersionOptions.Latest;
var filter = WorkflowDefinitionHandle.ByDefinitionId(request.DefinitionId, versionOptions).ToFilter();
Expand All @@ -24,10 +25,10 @@ public override async Task HandleAsync(Request request, CancellationToken cancel
if (definition == null)
{
await SendNotFoundAsync(cancellationToken);
return;
return null!;
}

var model = await linker.MapAsync(definition, cancellationToken);
await SendOkAsync(model, cancellationToken);
return model;
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using Elsa.Abstractions;
using Elsa.Workflows.Api.Models;
using Elsa.Workflows.Management;
using Elsa.Workflows.Management.Filters;
using JetBrains.Annotations;
Expand All @@ -7,7 +8,7 @@
namespace Elsa.Workflows.Api.Endpoints.WorkflowDefinitions.GetById;

[PublicAPI]
internal class GetById(IWorkflowDefinitionStore store, IWorkflowDefinitionLinker linker) : ElsaEndpoint<Request>
internal class GetById(IWorkflowDefinitionStore store, IWorkflowDefinitionLinker linker) : ElsaEndpoint<Request, LinkedWorkflowDefinitionModel>
{
public override void Configure()
{
Expand All @@ -16,7 +17,7 @@ public override void Configure()
Options(x => x.WithName("GetWorkflowDefinitionById"));
}

public override async Task HandleAsync(Request request, CancellationToken cancellationToken)
public override async Task<LinkedWorkflowDefinitionModel> ExecuteAsync(Request request, CancellationToken cancellationToken)
{
var filter = new WorkflowDefinitionFilter
{
Expand All @@ -28,10 +29,10 @@ public override async Task HandleAsync(Request request, CancellationToken cancel
if (definition == null)
{
await SendNotFoundAsync(cancellationToken);
return;
return null!;
}

var model = await linker.MapAsync(definition, cancellationToken);
await SendOkAsync(model, cancellationToken);
return model;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,15 @@
namespace Elsa.Workflows.Api.Endpoints.WorkflowDefinitions.GetManyById;

[PublicAPI]
internal class GetManyById(IWorkflowDefinitionStore store, IWorkflowDefinitionLinker linker) : ElsaEndpoint<Request>
internal class GetManyById(IWorkflowDefinitionStore store, IWorkflowDefinitionLinker linker) : ElsaEndpoint<Request, ListResponse<LinkedWorkflowDefinitionModel>>
{
public override void Configure()
{
Get("/workflow-definitions/many-by-id");
ConfigurePermissions("read:workflow-definitions");
}

public override async Task HandleAsync(Request request, CancellationToken cancellationToken)
public override async Task<ListResponse<LinkedWorkflowDefinitionModel>> ExecuteAsync(Request request, CancellationToken cancellationToken)
{
var filter = new WorkflowDefinitionFilter
{
Expand All @@ -26,6 +26,6 @@ public override async Task HandleAsync(Request request, CancellationToken cancel
var definitions = (await store.FindManyAsync(filter, cancellationToken)).ToList();
var models = await linker.MapAsync(definitions, cancellationToken);
var response = new ListResponse<LinkedWorkflowDefinitionModel>(models);
await SendOkAsync(response, cancellationToken);
return response;
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using Elsa.Abstractions;
using Elsa.Extensions;
using Elsa.Workflows.Management;
using Elsa.Workflows.Models;
using Elsa.Workflows.Serialization.Converters;
using Elsa.Workflows.Serialization.Helpers;
using JetBrains.Annotations;
Expand All @@ -9,7 +10,7 @@
namespace Elsa.Workflows.Api.Endpoints.WorkflowDefinitions.Graph;

[PublicAPI]
internal class Graph(IWorkflowDefinitionService workflowDefinitionService, IApiSerializer apiSerializer, ActivityWriter activityWriter) : ElsaEndpoint<Request>
internal class Graph(IWorkflowDefinitionService workflowDefinitionService, IApiSerializer apiSerializer, ActivityWriter activityWriter) : ElsaEndpoint<Request, ActivityNode>
{
public override void Configure()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
namespace Elsa.Workflows.Api.Endpoints.WorkflowDefinitions.Graph.Segments;

[PublicAPI]
internal class Nodes(IWorkflowDefinitionService workflowDefinitionService, IApiSerializer apiSerializer, ActivityWriter activityWriter) : ElsaEndpoint<Request>
internal class Nodes(IWorkflowDefinitionService workflowDefinitionService, IApiSerializer apiSerializer, ActivityWriter activityWriter) : ElsaEndpoint<Request, Response>
{
public override void Configure()
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using Elsa.Abstractions;
using Elsa.Workflows.Api.Constants;
using Elsa.Workflows.Api.Models;
using Elsa.Workflows.Api.Requirements;
using Elsa.Workflows.Management;
using Elsa.Workflows.Management.Models;
Expand All @@ -12,7 +13,7 @@ namespace Elsa.Workflows.Api.Endpoints.WorkflowDefinitions.Import;
/// Imports JSON and/or ZIP files containing a workflow definitions.
/// </summary>
[PublicAPI]
internal class Import : ElsaEndpoint<WorkflowDefinitionModel>
internal class Import : ElsaEndpoint<WorkflowDefinitionModel, LinkedWorkflowDefinitionModel>
{
private readonly IWorkflowDefinitionImporter _workflowDefinitionImporter;
private readonly IWorkflowDefinitionLinker _linker;
Expand All @@ -38,7 +39,7 @@ public override void Configure()
}

/// <inheritdoc />
public override async Task HandleAsync(WorkflowDefinitionModel model, CancellationToken cancellationToken)
public override async Task<LinkedWorkflowDefinitionModel> ExecuteAsync(WorkflowDefinitionModel model, CancellationToken cancellationToken)
{
var definitionId = model.DefinitionId;
var isNew = string.IsNullOrWhiteSpace(definitionId);
Expand All @@ -50,7 +51,7 @@ public override async Task HandleAsync(WorkflowDefinitionModel model, Cancellati
if (!authorizationResult.Succeeded)
{
await SendForbiddenAsync(cancellationToken);
return;
return null!;
}

var updatedModel = await _linker.MapAsync(definition, cancellationToken);
Expand All @@ -59,12 +60,12 @@ public override async Task HandleAsync(WorkflowDefinitionModel model, Cancellati
{
if (isNew)
await SendCreatedAtAsync<GetByDefinitionId.GetByDefinitionId>(new { DefinitionId = definitionId }, updatedModel, cancellation: cancellationToken);
else
await SendOkAsync(updatedModel, cancellationToken);
return updatedModel;
}

if (ValidationFailed)
await SendErrorsAsync(400, cancellationToken);
return null!;
}

private async Task<ImportWorkflowResult> ImportSingleWorkflowDefinitionAsync(WorkflowDefinitionModel model, CancellationToken cancellationToken)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ namespace Elsa.Workflows.Api.Endpoints.WorkflowDefinitions.ImportFiles;
/// Imports JSON and/or ZIP files containing a workflow definitions.
/// </summary>
[PublicAPI]
internal class ImportFiles : ElsaEndpoint<WorkflowDefinitionModel>
internal class ImportFiles : ElsaEndpoint<WorkflowDefinitionModel, Response>
{
private readonly IWorkflowDefinitionService _workflowDefinitionService;
private readonly IWorkflowDefinitionImporter _workflowDefinitionImporter;
Expand Down Expand Up @@ -47,26 +47,27 @@ public override void Configure()
}

/// <inheritdoc />
public override async Task HandleAsync(WorkflowDefinitionModel model, CancellationToken cancellationToken)
public override async Task<Response> ExecuteAsync(WorkflowDefinitionModel model, CancellationToken cancellationToken)
{
var authorizationResult = await _authorizationService.AuthorizeAsync(User, new NotReadOnlyResource(), AuthorizationPolicies.NotReadOnlyPolicy);

if (!authorizationResult.Succeeded)
{
await SendForbiddenAsync(cancellationToken);
return;
return null!;
}

if (Files.Any())
{
var count = await ImportFilesAsync(Files, cancellationToken);

if (!ValidationFailed)
await SendOkAsync(new { Count = count }, cancellationToken);
return new Response(count);
}

if (ValidationFailed)
await SendErrorsAsync(400, cancellationToken);
return null!;
}

private async Task<int> ImportFilesAsync(IFormFileCollection files, CancellationToken cancellationToken)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
using System.Text.Json.Serialization;

namespace Elsa.Workflows.Api.Endpoints.WorkflowDefinitions.ImportFiles;

internal class Response(long importedCount)
{
[JsonPropertyName("imported")] public long ImportedCount { get; } = importedCount;
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,19 +8,19 @@ namespace Elsa.Workflows.Api.Endpoints.WorkflowDefinitions.IsNameUnique;
/// Checks if a workflow definition name is unique.
/// </summary>
[PublicAPI]
internal class IsNameUnique(IWorkflowDefinitionStore store) : ElsaEndpoint<Request>
internal class IsNameUnique(IWorkflowDefinitionStore store) : ElsaEndpoint<Request, Response>
{
public override void Configure()
{
Get("/workflow-definitions/validation/is-name-unique");
ConfigurePermissions("read:workflow-definitions");
}

public override async Task HandleAsync(Request request, CancellationToken cancellationToken)
public override async Task<Response> ExecuteAsync(Request request, CancellationToken cancellationToken)
{
var isUnique = await store.GetIsNameUnique(request.Name.Trim(), request.DefinitionId, cancellationToken);
var response = new Response(isUnique);

await SendOkAsync(response, cancellationToken);
return response;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
namespace Elsa.Workflows.Api.Endpoints.WorkflowDefinitions.Refresh;

[PublicAPI]
internal class Refresh(IWorkflowDefinitionsRefresher workflowDefinitionsRefresher) : ElsaEndpoint<Request>
internal class Refresh(IWorkflowDefinitionsRefresher workflowDefinitionsRefresher) : ElsaEndpoint<Request, Response>
{
private const int BatchSize = 10;

Expand All @@ -17,10 +17,10 @@ public override void Configure()
ConfigurePermissions("actions:workflow-definitions:refresh");
}

public override async Task HandleAsync(Request request, CancellationToken cancellationToken)
public override async Task<Response> ExecuteAsync(Request request, CancellationToken cancellationToken)
{
var result = await RefreshWorkflowDefinitionsAsync(request.DefinitionIds, cancellationToken);
await SendOkAsync(new Response(result.Refreshed, result.NotFound), cancellationToken);
return new Response(result.Refreshed, result.NotFound);
}

private async Task<RefreshWorkflowDefinitionsResponse> RefreshWorkflowDefinitionsAsync(ICollection<string>? definitionIds, CancellationToken cancellationToken)
Expand Down
Loading