using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Elsa.Extensions;
using Elsa.Http.Contracts;
using Elsa.Workflows.Core.Helpers;
using Elsa.Workflows.Runtime.Contracts;
using Elsa.Workflows.Runtime.Filters;
namespace Elsa.Http.Services;
///
public class DefaultRouteTableUpdater : IRouteTableUpdater
{
private readonly IRouteTable _routeTable;
private readonly ITriggerStore _triggerStore;
private readonly IBookmarkStore _bookmarkStore;
///
/// Initializes a new instance of the class.
///
public DefaultRouteTableUpdater(IRouteTable routeTable, ITriggerStore triggerStore, IBookmarkStore bookmarkStore)
{
_routeTable = routeTable;
_triggerStore = triggerStore;
_bookmarkStore = bookmarkStore;
}
///
public async Task UpdateAsync(CancellationToken cancellationToken = default)
{
var bookmarkName = ActivityTypeNameHelper.GenerateTypeName();
var triggerFilter = new TriggerFilter { Name = bookmarkName };
var bookmarkFilter = new BookmarkFilter { ActivityTypeName = bookmarkName};
var triggers = (await _triggerStore.FindManyAsync(triggerFilter, cancellationToken)).ToList();
var bookmarks = (await _bookmarkStore.FindManyAsync(bookmarkFilter, cancellationToken)).ToList();
_routeTable.AddRoutes(triggers);
_routeTable.AddRoutes(bookmarks);
}
}