Refactor WorkflowDefinitionManager: streamline constructor, remove unused field, and improve consistency in method calls.

This commit is contained in:
Sipke Schoorstra 2025-10-06 10:33:09 +02:00
parent 95b17135a9
commit fcdb6f5499

View file

@ -7,38 +7,21 @@ using Elsa.Workflows.Management.Notifications;
namespace Elsa.Workflows.Management.Services;
/// <inheritdoc />
public class WorkflowDefinitionManager : IWorkflowDefinitionManager
public class WorkflowDefinitionManager(
IWorkflowDefinitionStore store,
INotificationSender notificationSender,
IWorkflowDefinitionPublisher workflowPublisher) : IWorkflowDefinitionManager
{
private readonly IWorkflowDefinitionStore _store;
private readonly INotificationSender _notificationSender;
private readonly IWorkflowDefinitionPublisher _workflowPublisher;
private readonly IIdentityGenerator _identityGenerator;
/// <summary>
/// Constructor.
/// </summary>
public WorkflowDefinitionManager(
IWorkflowDefinitionStore store,
INotificationSender notificationSender,
IWorkflowDefinitionPublisher workflowPublisher,
IIdentityGenerator identityGenerator)
{
_store = store;
_notificationSender = notificationSender;
_workflowPublisher = workflowPublisher;
_identityGenerator = identityGenerator;
}
/// <inheritdoc />
public async Task<long> DeleteByDefinitionIdAsync(string definitionId, CancellationToken cancellationToken = default)
{
await _notificationSender.SendAsync(new WorkflowDefinitionDeleting(definitionId), cancellationToken);
await notificationSender.SendAsync(new WorkflowDefinitionDeleting(definitionId), cancellationToken);
var filter = new WorkflowDefinitionFilter
{
DefinitionId = definitionId
};
var count = await _store.DeleteAsync(filter, cancellationToken);
await _notificationSender.SendAsync(new WorkflowDefinitionDeleted(definitionId), cancellationToken);
var count = await store.DeleteAsync(filter, cancellationToken);
await notificationSender.SendAsync(new WorkflowDefinitionDeleted(definitionId), cancellationToken);
return count;
}
@ -49,7 +32,7 @@ public class WorkflowDefinitionManager : IWorkflowDefinitionManager
{
Id = id
};
var definition = await _store.FindAsync(filter, cancellationToken);
var definition = await store.FindAsync(filter, cancellationToken);
if (definition == null)
return false;
@ -61,15 +44,15 @@ public class WorkflowDefinitionManager : IWorkflowDefinitionManager
public async Task<long> BulkDeleteByDefinitionIdsAsync(IEnumerable<string> definitionIds, CancellationToken cancellationToken = default)
{
var definitionIdList = definitionIds.Distinct().ToList();
await _notificationSender.SendAsync(new WorkflowDefinitionsDeleting(definitionIdList), cancellationToken);
await notificationSender.SendAsync(new WorkflowDefinitionsDeleting(definitionIdList), cancellationToken);
var filter = new WorkflowDefinitionFilter
{
DefinitionIds = definitionIdList,
IsReadonly = false
};
var count = await _store.DeleteAsync(filter, cancellationToken);
var count = await store.DeleteAsync(filter, cancellationToken);
await EnsureLastVersionIsLatestAsync(definitionIdList, cancellationToken);
await _notificationSender.SendAsync(new WorkflowDefinitionsDeleted(definitionIdList), cancellationToken);
await notificationSender.SendAsync(new WorkflowDefinitionsDeleted(definitionIdList), cancellationToken);
return count;
}
@ -77,19 +60,19 @@ public class WorkflowDefinitionManager : IWorkflowDefinitionManager
public async Task<long> BulkDeleteByIdsAsync(IEnumerable<string> ids, CancellationToken cancellationToken = default)
{
var idList = ids.ToList();
var definitions = await _store.FindSummariesAsync(new WorkflowDefinitionFilter
var definitions = await store.FindSummariesAsync(new WorkflowDefinitionFilter
{
Ids = idList
}, cancellationToken);
var definitionIds = definitions.Select(x => x.DefinitionId).Distinct().ToList();
await _notificationSender.SendAsync(new WorkflowDefinitionVersionsDeleting(idList), cancellationToken);
await notificationSender.SendAsync(new WorkflowDefinitionVersionsDeleting(idList), cancellationToken);
var filter = new WorkflowDefinitionFilter
{
Ids = idList
};
var count = await _store.DeleteAsync(filter, cancellationToken);
var count = await store.DeleteAsync(filter, cancellationToken);
await EnsureLastVersionIsLatestAsync(definitionIds, cancellationToken);
await _notificationSender.SendAsync(new WorkflowDefinitionVersionsDeleted(idList), cancellationToken);
await notificationSender.SendAsync(new WorkflowDefinitionVersionsDeleted(idList), cancellationToken);
return count;
}
@ -101,7 +84,7 @@ public class WorkflowDefinitionManager : IWorkflowDefinitionManager
DefinitionId = definitionId,
VersionOptions = VersionOptions.SpecificVersion(versionToDelete)
};
var definitionToDelete = await _store.FindAsync(filter, cancellationToken);
var definitionToDelete = await store.FindAsync(filter, cancellationToken);
if (definitionToDelete == null)
return false;
@ -114,22 +97,22 @@ public class WorkflowDefinitionManager : IWorkflowDefinitionManager
{
if (definitionToDelete.IsPublished)
{
await _workflowPublisher.RetractAsync(definitionToDelete, cancellationToken);
await workflowPublisher.RetractAsync(definitionToDelete, cancellationToken);
}
await _notificationSender.SendAsync(new WorkflowDefinitionVersionDeleting(definitionToDelete), cancellationToken);
await notificationSender.SendAsync(new WorkflowDefinitionVersionDeleting(definitionToDelete), cancellationToken);
var filter = new WorkflowDefinitionFilter
{
Id = definitionToDelete.Id
};
var isDeleted = await _store.DeleteAsync(filter, cancellationToken) > 0;
var isDeleted = await store.DeleteAsync(filter, cancellationToken) > 0;
if (!isDeleted)
return false;
await EnsureLastVersionIsLatestAsync(definitionToDelete.DefinitionId, cancellationToken);
await _notificationSender.SendAsync(new WorkflowDefinitionVersionDeleted(definitionToDelete), cancellationToken);
await notificationSender.SendAsync(new WorkflowDefinitionVersionDeleted(definitionToDelete), cancellationToken);
return isDeleted;
}
@ -137,7 +120,7 @@ public class WorkflowDefinitionManager : IWorkflowDefinitionManager
/// <inheritdoc />
public Task<WorkflowDefinition> RevertVersionAsync(string definitionId, int version, CancellationToken cancellationToken = default)
{
return _workflowPublisher.RevertVersionAsync(definitionId, version, cancellationToken);
return workflowPublisher.RevertVersionAsync(definitionId, version, cancellationToken);
}
private async Task EnsureLastVersionIsLatestAsync(IEnumerable<string> definitionIds, CancellationToken cancellationToken)
@ -157,12 +140,12 @@ public class WorkflowDefinitionManager : IWorkflowDefinitionManager
{
DefinitionId = definitionId
};
var lastVersion = await _store.FindLastVersionAsync(filter, cancellationToken);
var lastVersion = await store.FindLastVersionAsync(filter, cancellationToken);
if (lastVersion is null)
return;
lastVersion.IsLatest = true;
await _store.SaveAsync(lastVersion, cancellationToken);
await store.SaveAsync(lastVersion, cancellationToken);
}
}