elsa-core/src/modules/Elsa.Workflows.Runtime/Services/BookmarkUpdater.cs
Sipke Schoorstra 8cb43db070 Refactor workflow state persistence for improved consistency.
Removed obsolete middleware for persisting bookmarks, execution logs, and variables, integrating their functionality into the commit state handler. Added early exit checks for empty collections in persistence methods. Updated activity invoker logic for better state commit handling during execution.
2025-01-27 20:07:23 +01:00

43 lines
1.6 KiB
C#

using Elsa.Workflows.Models;
using Elsa.Workflows.Runtime.Filters;
using Elsa.Workflows.Runtime.Requests;
namespace Elsa.Workflows.Runtime;
/// <inheritdoc />
public class BookmarkUpdater(IBookmarkManager bookmarkManager, IBookmarkStore bookmarkStore) : IBookmarkUpdater
{
/// <inheritdoc />
public async Task UpdateBookmarksAsync(UpdateBookmarksRequest request, CancellationToken cancellationToken = default)
{
var instanceId = request.WorkflowExecutionContext.Id;
await RemoveBookmarksAsync(instanceId, request.Diff.Removed.ToList(), cancellationToken);
await StoreBookmarksAsync(request.WorkflowExecutionContext, request.Diff.Added.ToList(), cancellationToken);
}
private async Task RemoveBookmarksAsync(string workflowInstanceId, ICollection<Bookmark> bookmarks, CancellationToken cancellationToken)
{
if (bookmarks.Count == 0)
return;
var matchingIds = bookmarks.Select(x => x.Id).ToList();
var filter = new BookmarkFilter
{
BookmarkIds = matchingIds,
WorkflowInstanceId = workflowInstanceId
};
await bookmarkManager.DeleteManyAsync(filter, cancellationToken);
}
private async Task StoreBookmarksAsync(WorkflowExecutionContext context, ICollection<Bookmark> bookmarks, CancellationToken cancellationToken)
{
if (bookmarks.Count == 0)
return;
foreach (var bookmark in bookmarks)
{
var storedBookmark = context.MapBookmark(bookmark);
await bookmarkStore.SaveAsync(storedBookmark, cancellationToken);
}
}
}