using Microsoft.EntityFrameworkCore; using Phantom.Utils.Logging; using Phantom.Utils.Tasks; using Serilog; namespace Phantom.Controller.Database; public static class DatabaseMigrator { private static readonly ILogger Logger = PhantomLogger.Create(nameof(DatabaseMigrator)); public static async Task Run(IDbContextProvider dbProvider, CancellationToken cancellationToken) { await using var ctx = dbProvider.Eager(); Logger.Information("Connecting to database..."); var retryConnection = new Throttler(TimeSpan.FromSeconds(10)); while (!await ctx.Database.CanConnectAsync(cancellationToken)) { Logger.Warning("Cannot connect to database, retrying..."); await retryConnection.Wait(); } Logger.Information("Running migrations..."); await ctx.Database.MigrateAsync(CancellationToken.None); } }