using DbUp;
using Microsoft.Extensions.Logging;
namespace QuantEngine.Infrastructure.Data
{
///
/// Database migration manager using DbUp.
/// SQL migration files are embedded in the assembly under Migrations/ folder.
/// Naming convention: V{version}__{description}.sql
///
public class DbMigrator
{
private readonly string _connectionString;
private readonly ILogger _logger;
public DbMigrator(string connectionString, ILogger logger)
{
_connectionString = connectionString;
_logger = logger;
}
public void Migrate()
{
_logger.LogInformation("🔄 Starting database migration with DbUp...");
try
{
var upgrader = DeployChanges.To
.PostgresqlDatabase(_connectionString)
.WithScriptsEmbeddedInAssembly(typeof(DbMigrator).Assembly, s => s.StartsWith("QuantEngine.Infrastructure.Migrations"))
.LogToConsole()
.Build();
var result = upgrader.PerformUpgrade();
if (!result.Successful)
{
_logger.LogError("❌ Database migration failed: {Error}", result.Error?.Message);
throw new InvalidOperationException($"Database migration failed: {result.Error?.Message}");
}
_logger.LogInformation("✅ Database migration completed successfully");
}
catch (Exception ex)
{
_logger.LogError(ex, "❌ Database migration failed");
throw;
}
}
}
}