42 lines
1.8 KiB
C#
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;
|
|
}
|
|
}
|