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); } }