using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;
namespace StellaOps.Scanner.Triage;
///
/// Design-time DbContext factory for dotnet ef CLI tooling.
/// Used by scaffold and optimize commands.
///
public sealed class TriageDesignTimeDbContextFactory : IDesignTimeDbContextFactory
{
private const string DefaultConnectionString =
"Host=localhost;Port=55433;Database=postgres;Username=postgres;Password=postgres;Search Path=scanner,public";
private const string ConnectionStringEnvironmentVariable = "STELLAOPS_TRIAGE_EF_CONNECTION";
public TriageDbContext CreateDbContext(string[] args)
{
var connectionString = ResolveConnectionString();
var options = new DbContextOptionsBuilder()
.UseNpgsql(connectionString, npgsql =>
{
npgsql.MapEnum("triage_lane");
npgsql.MapEnum("triage_verdict");
npgsql.MapEnum("triage_reachability");
npgsql.MapEnum("triage_vex_status");
npgsql.MapEnum("triage_decision_kind");
npgsql.MapEnum("triage_snapshot_trigger");
npgsql.MapEnum("triage_evidence_type");
})
.Options;
return new TriageDbContext(options);
}
private static string ResolveConnectionString()
{
var fromEnvironment = Environment.GetEnvironmentVariable(ConnectionStringEnvironmentVariable);
return string.IsNullOrWhiteSpace(fromEnvironment) ? DefaultConnectionString : fromEnvironment;
}
}