diff --git a/VigilCareRecordsAPI/Data/AppDbContextFactory.cs b/VigilCareRecordsAPI/Data/AppDbContextFactory.cs new file mode 100644 index 0000000..1384edc --- /dev/null +++ b/VigilCareRecordsAPI/Data/AppDbContextFactory.cs @@ -0,0 +1,39 @@ +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"; + } +}