Files
git.stella-ops.org/src/Scanner/__Libraries/StellaOps.Scanner.Triage/TriageDesignTimeDbContextFactory.cs

42 lines
1.8 KiB
C#

using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;
namespace StellaOps.Scanner.Triage;
/// <summary>
/// Design-time DbContext factory for dotnet ef CLI tooling.
/// Used by scaffold and optimize commands.
/// </summary>
public sealed class TriageDesignTimeDbContextFactory : IDesignTimeDbContextFactory<TriageDbContext>
{
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<TriageDbContext>()
.UseNpgsql(connectionString, npgsql =>
{
npgsql.MapEnum<Entities.TriageLane>("triage_lane");
npgsql.MapEnum<Entities.TriageVerdict>("triage_verdict");
npgsql.MapEnum<Entities.TriageReachability>("triage_reachability");
npgsql.MapEnum<Entities.TriageVexStatus>("triage_vex_status");
npgsql.MapEnum<Entities.TriageDecisionKind>("triage_decision_kind");
npgsql.MapEnum<Entities.TriageSnapshotTrigger>("triage_snapshot_trigger");
npgsql.MapEnum<Entities.TriageEvidenceType>("triage_evidence_type");
})
.Options;
return new TriageDbContext(options);
}
private static string ResolveConnectionString()
{
var fromEnvironment = Environment.GetEnvironmentVariable(ConnectionStringEnvironmentVariable);
return string.IsNullOrWhiteSpace(fromEnvironment) ? DefaultConnectionString : fromEnvironment;
}
}