using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;
///
/// Design-time factory for EF tools and the CD migrations bundle.
/// Without this, the bundle tries to bootstrap Program.cs (JWT/MinIO/etc.) and fails
/// when those settings are absent next to ./migrate-api; --connection then never applies.
///
public class AppDbContextFactory : IDesignTimeDbContextFactory
{
public AppDbContext CreateDbContext(string[] args)
{
var optionsBuilder = new DbContextOptionsBuilder();
optionsBuilder.UseNpgsql(ResolveConnectionString());
return new AppDbContext(optionsBuilder.Options);
}
private static string ResolveConnectionString()
{
var fromEnv = Environment.GetEnvironmentVariable("ConnectionStrings__DefaultConnection");
if (!string.IsNullOrWhiteSpace(fromEnv))
return fromEnv;
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: true)
.AddJsonFile("appsettings.Development.json", optional: true)
.AddEnvironmentVariables()
.Build();
var fromConfig = config.GetConnectionString("DefaultConnection");
if (!string.IsNullOrWhiteSpace(fromConfig))
return fromConfig;
// Placeholder so the factory can construct a context; migrate-api --connection
// replaces this when applying migrations in CD.
return "Host=127.0.0.1;Database=ef_design;Username=ef;Password=ef";
}
}