using Elsa.Quartz.EntityFrameworkCore.PostgreSql; using Elsa.Quartz.Features; using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using Quartz; // ReSharper disable once CheckNamespace namespace Elsa.EntityFrameworkCore.Extensions; /// /// Provides extensions to configure EF Core to use PostgreSQL. /// [PublicAPI] public static class PostgreSqlQuartzExtensions { /// /// Configures the to use the PostgreSQL job store. /// public static QuartzFeature UsePostgreSql(this QuartzFeature feature, string connectionString = Constants.DefaultConnectionString, bool useClustering = true, bool useContextPooling = false) { if (useContextPooling) feature.Services.AddPooledDbContextFactory(options => UseNpgsql(connectionString, options)); else feature.Services.AddDbContextFactory(options => UseNpgsql(connectionString, options)); feature.ConfigureQuartz += quartz => { quartz.UsePersistentStore(store => { store.UseNewtonsoftJsonSerializer(); store.UsePostgres(options => { options.ConnectionString = connectionString; options.TablePrefix = "quartz.qrtz_"; }); if (useClustering) store.UseClustering(); }); }; feature.Module.ConfigureHostedService>(-100); return feature; } private static void UseNpgsql(string connectionString, DbContextOptionsBuilder options) { // Use PostgreSQL migrations. options.UseNpgsql(connectionString, sqlServerDbContextOptionsBuilder => { sqlServerDbContextOptionsBuilder.MigrationsAssembly(typeof(PostgreSqlQuartzDbContext).Assembly.GetName().Name); }); } }