using Elsa.Caching;
using Elsa.Http.Bookmarks;
using Elsa.Http.Contracts;
using Elsa.Workflows.Contracts;
using Elsa.Workflows.Helpers;
namespace Elsa.Http.Services;
/// <inheritdoc />
public class HttpWorkflowsCacheManager(ICacheManager cache, IBookmarkHasher bookmarkHasher) : IHttpWorkflowsCacheManager
{
public ICacheManager Cache => cache;
public async Task EvictWorkflowAsync(string workflowDefinitionId, CancellationToken cancellationToken = default)
var changeTokenKey = GetWorkflowChangeTokenKey(workflowDefinitionId);
await cache.TriggerTokenAsync(changeTokenKey, cancellationToken);
}
public async Task EvictTriggerAsync(string bookmarkHash, CancellationToken cancellationToken = default)
var changeTokenKey = GetTriggerChangeTokenKey(bookmarkHash);
public string GetWorkflowChangeTokenKey(string workflowDefinitionId) => $"{GetType().FullName}:workflow:{workflowDefinitionId}:changeToken";
public string GetTriggerChangeTokenKey(string bookmarkHash) => $"{GetType().FullName}:trigger:{bookmarkHash}:changeToken";
public string ComputeBookmarkHash(string path, string method)
var bookmarkPayload = new HttpEndpointBookmarkPayload(path, method);
var activityTypeName = ActivityTypeNameHelper.GenerateTypeName<HttpEndpoint>();
return bookmarkHasher.Hash(activityTypeName, bookmarkPayload);