using Elsa.Caching;
using Elsa.Http.Bookmarks;
using Elsa.Workflows;
using Elsa.Workflows.Helpers;
namespace Elsa.Http.Services;
///
public class HttpWorkflowsCacheManager(ICacheManager cache, IHasher 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);
await cache.TriggerTokenAsync(changeTokenKey, cancellationToken);
}
///
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();
return bookmarkHasher.Hash(activityTypeName, bookmarkPayload);
}
}