Files
BTCPayServerPlugins/Plugins/BTCPayServer.Plugins.MicroNode/MicroNodeStartupTask.cs
2024-01-17 09:07:18 +01:00

37 lines
1.3 KiB
C#

using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using BTCPayServer.Abstractions.Contracts;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
namespace BTCPayServer.Plugins.MicroNode;
public class MicroNodeStartupTask : IStartupTask
{
private readonly MicroNodeContextFactory _microNodeContextFactory;
private readonly ILogger<MicroNodeStartupTask> _logger;
public MicroNodeStartupTask(MicroNodeContextFactory microNodeContextFactory, ILogger<MicroNodeStartupTask> logger)
{
_microNodeContextFactory = microNodeContextFactory;
_logger = logger;
}
public async Task ExecuteAsync(CancellationToken cancellationToken = new())
{
_logger.LogInformation("Migrating MicroNode database");
await using var ctx = _microNodeContextFactory.CreateContext();
var pendingMigrations = await ctx.Database.GetPendingMigrationsAsync(cancellationToken: cancellationToken);
if (pendingMigrations.Any())
{
_logger.LogInformation("Applying {Count} migrations", pendingMigrations.Count());
await ctx.Database.MigrateAsync(cancellationToken: cancellationToken);
}
else
{
_logger.LogInformation("No migrations to apply");
}
}
}