< Summary

Information
Class: Elsa.Workflows.Api.Endpoints.WorkflowDefinitions.BulkRetract.BulkRetract
Assembly: Elsa.Workflows.Api
File(s): /home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Workflows.Api/Endpoints/WorkflowDefinitions/BulkRetract/Endpoint.cs
Line coverage
12%
Covered lines: 4
Uncovered lines: 29
Coverable lines: 33
Total lines: 71
Line coverage: 12.1%
Branch coverage
0%
Covered branches: 0
Total branches: 10
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
Configure()100%11100%
ExecuteAsync()0%110100%

File(s)

/home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Workflows.Api/Endpoints/WorkflowDefinitions/BulkRetract/Endpoint.cs

#LineLine coverage
 1using Elsa.Authorization;
 2using Elsa.Abstractions;
 3using Elsa.Common.Models;
 4using Elsa.Workflows.Api.Constants;
 5using Elsa.Workflows.Api.Requirements;
 6using Elsa.Workflows.Management;
 7using Elsa.Workflows.Management.Filters;
 8using JetBrains.Annotations;
 9using Microsoft.AspNetCore.Authorization;
 10
 11namespace Elsa.Workflows.Api.Endpoints.WorkflowDefinitions.BulkRetract;
 12
 13[PublicAPI]
 314internal class BulkRetract(IWorkflowDefinitionStore store, IWorkflowDefinitionPublisher workflowDefinitionPublisher, IAu
 15    : ElsaEndpoint<Request, Response>
 16{
 17    public override void Configure()
 18    {
 319        Post("/bulk-actions/retract/workflow-definitions/by-definition-ids");
 320        RequirePermission(Elsa.Workflows.Api.Permissions.WorkflowPermissions.Definitions, "retract");
 321    }
 22
 23    public override async Task<Response> ExecuteAsync(Request request, CancellationToken cancellationToken)
 24    {
 025        var authorizationResult = await authorizationService.AuthorizeAsync(User, new NotReadOnlyResource(), Authorizati
 26
 027        if (!authorizationResult.Succeeded)
 28        {
 029            await Send.ForbiddenAsync(cancellationToken);
 030            return null!;
 31        }
 32
 033        var retracted = new List<string>();
 034        var notFound = new List<string>();
 035        var notPublished = new List<string>();
 036        var skipped = new List<string>();
 37
 038        foreach (var definitionId in request.DefinitionIds)
 39        {
 040            var definitions = (await store.FindManyAsync(new WorkflowDefinitionFilter
 041            {
 042                DefinitionId = definitionId,
 043                VersionOptions = VersionOptions.LatestOrPublished
 044            }, cancellationToken: cancellationToken)).ToList();
 45
 046            if (!definitions.Any())
 47            {
 048                notFound.Add(definitionId);
 049                continue;
 50            }
 51
 052            var published = definitions.FirstOrDefault(d => d.IsPublished);
 053            if (published is null)
 54            {
 055                notPublished.Add(definitionId);
 056                continue;
 57            }
 58
 059            if (published.IsReadonly)
 60            {
 061                skipped.Add(definitionId);
 062                continue;
 63            }
 64
 065            await workflowDefinitionPublisher.RetractAsync(published, cancellationToken);
 066            retracted.Add(definitionId);
 067        }
 68
 069        return new Response(retracted, notPublished, notFound, skipped);
 070    }
 71}