This commit is contained in:
Gürkan Güran 2023-01-12 19:26:30 +01:00
parent edbe68f9e1
commit dad33e665a
16 changed files with 81 additions and 39 deletions

View file

@ -1,5 +1,3 @@
using Azure.Identity;
using Azure.ResourceManager;
using Elsa.EntityFrameworkCore.Extensions;
using Elsa.Extensions;
using Elsa.Identity.Options;
@ -8,9 +6,7 @@ using Elsa.EntityFrameworkCore.Modules.Labels;
using Elsa.EntityFrameworkCore.Modules.Management;
using Elsa.EntityFrameworkCore.Modules.Runtime;
using Microsoft.Data.Sqlite;
using Elsa.ProtoActor.Cluster.AzureContainerApps;
using Proto.Persistence.Sqlite;
using Proto.Remote.GrpcNet;
var builder = WebApplication.CreateBuilder(args);
var services = builder.Services;
@ -35,7 +31,7 @@ services
.UseDefaultAuthentication()
.UseWorkflowManagement(management =>
{
management.UseEntityFrameworkCore(ef => ef.UseSqlite(sqliteConnectionString));
management.UseDefaultManagement(m => m.UseEntityFrameworkCore(ef => ef.UseSqlite(sqliteConnectionString)));
management.UseWorkflowInstances(w => w.UseEntityFrameworkCore(ef => ef.UseSqlite(sqliteConnectionString)));
})
.UseWorkflowRuntime(runtime =>

View file

@ -15,7 +15,7 @@ public static class Utils
GetElasticConfigurationTypes()
.Select(t => t.BaseType!.GenericTypeArguments.First()).ToList();
public static IDictionary<Type, string> ResolveAliasConfig(
public static IDictionary<Type, string> ResolveIndexConfig(
IDictionary<Type, string> defaultConfig,
IDictionary<string, string>? userDefinedConfig)
{

View file

@ -22,7 +22,7 @@ public static class ModuleExtensions
{
f.Options = options;
f.IndexRolloverStrategy = rolloverStrategy;
f.IndexConfig = Utils.ResolveAliasConfig(f.IndexConfig, options.IndexConfig ?? indexConfig);
f.IndexConfig = Utils.ResolveIndexConfig(f.IndexConfig, options.IndexConfig ?? indexConfig);
};
module.Configure(configure);

View file

@ -6,7 +6,7 @@ namespace Elsa.EntityFrameworkCore.Extensions;
public static partial class Extensions
{
public static EFCoreManagementPersistenceFeature UsePostgreSql(this EFCoreManagementPersistenceFeature feature, string connectionString)
public static EFCoreDefaultManagementPersistenceFeature UsePostgreSql(this EFCoreDefaultManagementPersistenceFeature feature, string connectionString)
{
feature.DbContextOptionsBuilder = (_, db) => db.UseElsaPostgreSql(connectionString);
return feature;

View file

@ -5,7 +5,7 @@ namespace Elsa.EntityFrameworkCore.Extensions;
public static partial class Extensions
{
public static EFCoreManagementPersistenceFeature UseSqlServer(this EFCoreManagementPersistenceFeature feature, string connectionString)
public static EFCoreDefaultManagementPersistenceFeature UseSqlServer(this EFCoreDefaultManagementPersistenceFeature feature, string connectionString)
{
feature.DbContextOptionsBuilder = (_, db) => db.UseElsaSqlServer(connectionString);
return feature;

View file

@ -6,7 +6,7 @@ namespace Elsa.EntityFrameworkCore.Extensions;
public static partial class Extensions
{
public static EFCoreManagementPersistenceFeature UseSqlite(this EFCoreManagementPersistenceFeature feature, string connectionString = Constants.DefaultConnectionString)
public static EFCoreDefaultManagementPersistenceFeature UseSqlite(this EFCoreDefaultManagementPersistenceFeature feature, string connectionString = Constants.DefaultConnectionString)
{
feature.DbContextOptionsBuilder = (_, db) => db.UseElsaSqlite(connectionString);
return feature;

View file

@ -8,9 +8,9 @@ using Microsoft.Extensions.DependencyInjection;
namespace Elsa.EntityFrameworkCore.Modules.Management;
[DependsOn(typeof(WorkflowManagementFeature))]
public class EFCoreManagementPersistenceFeature : PersistenceFeatureBase<ManagementElsaDbContext>
public class EFCoreDefaultManagementPersistenceFeature : PersistenceFeatureBase<ManagementElsaDbContext>
{
public EFCoreManagementPersistenceFeature(IModule module) : base(module)
public EFCoreDefaultManagementPersistenceFeature(IModule module) : base(module)
{
}

View file

@ -10,8 +10,8 @@ public static class WorkflowManagementFeatureExtensions
/// <summary>
/// Sets up the EF Core persistence provider.
/// </summary>
public static WorkflowManagementFeature UseEntityFrameworkCore(this WorkflowManagementFeature feature,
Action<EFCoreManagementPersistenceFeature>? configure = default)
public static DefaultManagementFeature UseEntityFrameworkCore(this DefaultManagementFeature feature,
Action<EFCoreDefaultManagementPersistenceFeature>? configure = default)
{
feature.Module.Configure(configure);
return feature;

View file

@ -23,7 +23,6 @@ public class EFCoreDefaultRuntimePersistenceFeature : PersistenceFeatureBase<Run
feature.WorkflowStateStore = sp => sp.GetRequiredService<EFCoreWorkflowStateStore>();
feature.WorkflowTriggerStore = sp => sp.GetRequiredService<EFCoreTriggerStore>();
feature.BookmarkStore = sp => sp.GetRequiredService<EFCoreBookmarkStore>();
feature.WorkflowExecutionLogStore = sp => sp.GetRequiredService<EFCoreWorkflowExecutionLogStore>();
});
}
@ -34,6 +33,5 @@ public class EFCoreDefaultRuntimePersistenceFeature : PersistenceFeatureBase<Run
AddStore<WorkflowState, EFCoreWorkflowStateStore>();
AddStore<StoredTrigger, EFCoreTriggerStore>();
AddStore<StoredBookmark, EFCoreBookmarkStore>();
AddStore<WorkflowExecutionLogRecord, EFCoreWorkflowExecutionLogStore>();
}
}

View file

@ -24,6 +24,15 @@ public static class ModuleExtensions
return module;
}
/// <summary>
/// Adds the default workflow management feature to the specified module.
/// </summary>
public static WorkflowManagementFeature UseDefaultManagement(this WorkflowManagementFeature feature, Action<DefaultManagementFeature>? configure = default)
{
feature.Module.Configure(configure);
return feature;
}
/// <summary>
/// Adds the workflow instance feature to workflow management module.
/// </summary>

View file

@ -0,0 +1,11 @@
using Elsa.Features.Abstractions;
using Elsa.Features.Services;
namespace Elsa.Workflows.Management.Features;
public class DefaultManagementFeature : FeatureBase
{
public DefaultManagementFeature(IModule module) : base(module)
{
}
}

View file

@ -10,10 +10,18 @@ var configuration = builder.Configuration;
builder.Services.AddElsa(elsa =>
{
// Configure management feature to use EF Core.
elsa.UseWorkflowManagement(management => management.UseEntityFrameworkCore(ef => ef.UseSqlite()));
elsa.UseWorkflowManagement(management =>
{
management.UseDefaultManagement(dm => dm.UseEntityFrameworkCore(ef => ef.UseSqlite()));
management.UseWorkflowInstances(w => w.UseEntityFrameworkCore(ef => ef.UseSqlite()));
});
// Configure runtime feature to use EF Core.
elsa.UseWorkflowRuntime(runtime => runtime.UseDefaultRuntime(d => d.UseEntityFrameworkCore(ef => ef.UseSqlite())));
elsa.UseWorkflowRuntime(runtime =>
{
runtime.UseDefaultRuntime(d => d.UseEntityFrameworkCore(ef => ef.UseSqlite()));
runtime.UseExecutionLogRecords(d => d.UseEntityFrameworkCore(ef => ef.UseSqlite()));
});
// Expose API endpoints.
elsa.UseWorkflowsApi(api => api.AddFastEndpointsAssembly<Program>());

View file

@ -12,10 +12,18 @@ var rabbitMqConnectionString = configuration.GetConnectionString("RabbitMq")!;
builder.Services.AddElsa(elsa =>
{
// Configure management feature to use EF Core.
elsa.UseWorkflowManagement(management => management.UseEntityFrameworkCore(ef => ef.UseSqlite()));
elsa.UseWorkflowManagement(management =>
{
management.UseDefaultManagement(dm => dm.UseEntityFrameworkCore(ef => ef.UseSqlite()));
management.UseWorkflowInstances(w => w.UseEntityFrameworkCore(ef => ef.UseSqlite()));
});
// Configure runtime feature to use EF Core.
elsa.UseWorkflowRuntime(runtime => runtime.UseDefaultRuntime(d => d.UseEntityFrameworkCore(ef => ef.UseSqlite())));
elsa.UseWorkflowRuntime(runtime =>
{
runtime.UseDefaultRuntime(d => d.UseEntityFrameworkCore(ef => ef.UseSqlite()));
runtime.UseExecutionLogRecords(d => d.UseEntityFrameworkCore(ef => ef.UseSqlite()));
});
// Expose API endpoints.
elsa.UseWorkflowsApi();

View file

@ -29,23 +29,26 @@ identityTokenSection.Bind(identityTokenOptions);
// Add Elsa services.
services
.AddElsa(elsa => elsa
.UseWorkflowManagement(management => management
.UseEntityFrameworkCore(ef => ef.UseSqlite(sqliteConnectionString))
.AddActivity<WriteLine>()
.AddActivity<ReadLine>()
.AddActivity<If>()
.AddActivity<Flowchart>()
.AddActivity<FlowDecision>()
.AddActivity<FlowSwitch>()
.AddActivity<FlowJoin>()
.AddActivity<Elsa.Scheduling.Activities.Delay>()
.AddActivity<Elsa.Scheduling.Activities.Timer>()
.AddActivity<ForEach>()
.AddActivity<Switch>()
.AddActivity<RunJavaScript>()
.AddActivity<Event>()
.AddActivitiesFrom<Program>()
)
.UseWorkflowManagement(management =>
{
management
.UseDefaultManagement(dm => dm.UseEntityFrameworkCore(ef => ef.UseSqlite()))
.UseWorkflowInstances(w => w.UseEntityFrameworkCore(ef => ef.UseSqlite()))
.AddActivity<WriteLine>()
.AddActivity<ReadLine>()
.AddActivity<If>()
.AddActivity<Flowchart>()
.AddActivity<FlowDecision>()
.AddActivity<FlowSwitch>()
.AddActivity<FlowJoin>()
.AddActivity<Elsa.Scheduling.Activities.Delay>()
.AddActivity<Elsa.Scheduling.Activities.Timer>()
.AddActivity<ForEach>()
.AddActivity<Switch>()
.AddActivity<RunJavaScript>()
.AddActivity<Event>()
.AddActivitiesFrom<Program>();
})
.UseIdentity(identity =>
{
identity.IdentityOptions = identityOptions;
@ -58,6 +61,7 @@ services
//proto.PersistenceProvider = _ => new SqliteProvider(new SqliteConnectionStringBuilder(sqliteConnectionString));
});
runtime.UseDefaultRuntime(dr => dr.UseEntityFrameworkCore(ef => ef.UseSqlite(sqliteConnectionString)));
runtime.UseExecutionLogRecords(d => d.UseEntityFrameworkCore(ef => ef.UseSqlite()));
runtime.UseExecutionLogRecords(e => e.UseEntityFrameworkCore(ef => ef.UseSqlite(sqliteConnectionString)));
runtime.WorkflowStateExporter = sp => sp.GetRequiredService<AsyncWorkflowStateExporter>();
})

View file

@ -10,7 +10,11 @@ var builder = WebApplication.CreateBuilder(args);
builder.Services.AddElsa(elsa =>
{
// Configure management feature to use EF Core.
elsa.UseWorkflowManagement(management => management.UseEntityFrameworkCore(ef => ef.UseSqlite()));
elsa.UseWorkflowManagement(management =>
{
management.UseDefaultManagement(dm => dm.UseEntityFrameworkCore(ef => ef.UseSqlite()));
management.UseWorkflowInstances(w => w.UseEntityFrameworkCore(ef => ef.UseSqlite()));
});
// Expose API endpoints.
elsa.UseWorkflowsApi();

View file

@ -8,7 +8,11 @@ var builder = WebApplication.CreateBuilder(args);
builder.Services.AddElsa(elsa =>
{
// Configure management feature to use EF Core.
elsa.UseWorkflowManagement(management => management.UseEntityFrameworkCore(ef => ef.UseSqlite()));
elsa.UseWorkflowManagement(management =>
{
management.UseDefaultManagement(dm => dm.UseEntityFrameworkCore(ef => ef.UseSqlite()));
management.UseWorkflowInstances(w => w.UseEntityFrameworkCore(ef => ef.UseSqlite()));
});
// Expose API endpoints.
elsa.UseWorkflowsApi();