using Elsa.Common;
using Elsa.Common.RecurringTasks;
using JetBrains.Annotations;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Options;
// ReSharper disable once CheckNamespace
namespace Elsa.Persistence.EFCore;
///
/// Executes EF Core migrations using the specified type.
///
[UsedImplicitly]
[SingleNodeTask]
[Order(-100)]
public class RunMigrationsStartupTask(IDbContextFactory dbContextFactory, IOptions options) : IStartupTask where TDbContext : DbContext
{
///
public async Task ExecuteAsync(CancellationToken cancellationToken)
{
options.Value.RunMigrations.TryGetValue(typeof(TDbContext), out bool shouldRunMigrations);
if (!shouldRunMigrations)
return;
var dbContext = await dbContextFactory.CreateDbContextAsync(cancellationToken);
await dbContext.Database.MigrateAsync(cancellationToken);
}
}