Search/AdvisoryAI and DAL conversion to EF finishes up. Preparation for microservices consolidation.

This commit is contained in:
master
2026-02-25 18:19:22 +02:00
parent 4db038123b
commit 63c70a6d37
447 changed files with 52257 additions and 2636 deletions

View File

@@ -361,10 +361,12 @@ public sealed class PostgresExceptionRepository : IExceptionRepository
return [];
}
var now = _timeProvider.GetUtcNow();
var sql = $"""
SELECT * FROM policy.exceptions
WHERE status = 'active'
AND expires_at > NOW()
AND expires_at > @now
AND ({string.Join(" OR ", scopeClauses)})
ORDER BY created_at DESC
""";
@@ -372,6 +374,7 @@ public sealed class PostgresExceptionRepository : IExceptionRepository
await using var connection = await _dataSource.OpenConnectionAsync(cancellationToken).ConfigureAwait(false);
await using var cmd = new NpgsqlCommand(sql, connection);
cmd.Parameters.AddWithValue("now", now);
foreach (var (key, value) in parameters)
{
cmd.Parameters.AddWithValue(key, value ?? DBNull.Value);
@@ -396,13 +399,16 @@ public sealed class PostgresExceptionRepository : IExceptionRepository
const string sql = """
SELECT * FROM policy.exceptions
WHERE status = 'active'
AND expires_at > NOW()
AND expires_at <= NOW() + @interval
AND expires_at > @now
AND expires_at <= @now + @interval
ORDER BY expires_at ASC
""";
var now = _timeProvider.GetUtcNow();
await using var connection = await _dataSource.OpenConnectionAsync(cancellationToken).ConfigureAwait(false);
await using var cmd = new NpgsqlCommand(sql, connection);
cmd.Parameters.AddWithValue("now", now);
cmd.Parameters.AddWithValue("interval", withinTimeSpan);
var results = new List<ExceptionObject>();
@@ -422,12 +428,15 @@ public sealed class PostgresExceptionRepository : IExceptionRepository
const string sql = """
SELECT * FROM policy.exceptions
WHERE status = 'active'
AND expires_at <= NOW()
AND expires_at <= @now
ORDER BY expires_at ASC
""";
var now = _timeProvider.GetUtcNow();
await using var connection = await _dataSource.OpenConnectionAsync(cancellationToken).ConfigureAwait(false);
await using var cmd = new NpgsqlCommand(sql, connection);
cmd.Parameters.AddWithValue("now", now);
var results = new List<ExceptionObject>();
await using var reader = await cmd.ExecuteReaderAsync(cancellationToken).ConfigureAwait(false);

View File

@@ -0,0 +1,192 @@
// <auto-generated />
using System;
using System.Reflection;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
using StellaOps.Policy.Persistence.Postgres.Models;
#pragma warning disable 219, 612, 618
#nullable disable
namespace StellaOps.Policy.Persistence.EfCore.CompiledModels
{
[EntityFrameworkInternal]
public partial class AdvisorySourceConflictEntityEntityType
{
public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null)
{
var runtimeEntityType = model.AddEntityType(
"StellaOps.Policy.Persistence.Postgres.Models.AdvisorySourceConflictEntity",
typeof(AdvisorySourceConflictEntity),
baseEntityType,
propertyCount: 16,
keyCount: 1);
var conflictId = runtimeEntityType.AddProperty(
"ConflictId",
typeof(Guid),
propertyInfo: typeof(AdvisorySourceConflictEntity).GetProperty("ConflictId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(AdvisorySourceConflictEntity).GetField("<ConflictId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
afterSaveBehavior: PropertySaveBehavior.Throw,
sentinel: new Guid("00000000-0000-0000-0000-000000000000"));
conflictId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
conflictId.AddAnnotation("Relational:ColumnName", "conflict_id");
conflictId.AddAnnotation("Relational:DefaultValueSql", "gen_random_uuid()");
var advisoryId = runtimeEntityType.AddProperty(
"AdvisoryId",
typeof(string),
propertyInfo: typeof(AdvisorySourceConflictEntity).GetProperty("AdvisoryId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(AdvisorySourceConflictEntity).GetField("<AdvisoryId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
advisoryId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
advisoryId.AddAnnotation("Relational:ColumnName", "advisory_id");
var conflictType = runtimeEntityType.AddProperty(
"ConflictType",
typeof(string),
propertyInfo: typeof(AdvisorySourceConflictEntity).GetProperty("ConflictType", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(AdvisorySourceConflictEntity).GetField("<ConflictType>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
conflictType.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
conflictType.AddAnnotation("Relational:ColumnName", "conflict_type");
var description = runtimeEntityType.AddProperty(
"Description",
typeof(string),
propertyInfo: typeof(AdvisorySourceConflictEntity).GetProperty("Description", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(AdvisorySourceConflictEntity).GetField("<Description>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
description.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
description.AddAnnotation("Relational:ColumnName", "description");
var detailsJson = runtimeEntityType.AddProperty(
"DetailsJson",
typeof(string),
propertyInfo: typeof(AdvisorySourceConflictEntity).GetProperty("DetailsJson", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(AdvisorySourceConflictEntity).GetField("<DetailsJson>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
detailsJson.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
detailsJson.AddAnnotation("Relational:ColumnName", "details_json");
detailsJson.AddAnnotation("Relational:ColumnType", "jsonb");
var firstDetectedAt = runtimeEntityType.AddProperty(
"FirstDetectedAt",
typeof(DateTimeOffset),
propertyInfo: typeof(AdvisorySourceConflictEntity).GetProperty("FirstDetectedAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(AdvisorySourceConflictEntity).GetField("<FirstDetectedAt>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
sentinel: new DateTimeOffset(new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 0, 0, 0, 0)));
firstDetectedAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
firstDetectedAt.AddAnnotation("Relational:ColumnName", "first_detected_at");
firstDetectedAt.AddAnnotation("Relational:DefaultValueSql", "now()");
var lastDetectedAt = runtimeEntityType.AddProperty(
"LastDetectedAt",
typeof(DateTimeOffset),
propertyInfo: typeof(AdvisorySourceConflictEntity).GetProperty("LastDetectedAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(AdvisorySourceConflictEntity).GetField("<LastDetectedAt>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
sentinel: new DateTimeOffset(new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 0, 0, 0, 0)));
lastDetectedAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
lastDetectedAt.AddAnnotation("Relational:ColumnName", "last_detected_at");
lastDetectedAt.AddAnnotation("Relational:DefaultValueSql", "now()");
var pairedSourceKey = runtimeEntityType.AddProperty(
"PairedSourceKey",
typeof(string),
propertyInfo: typeof(AdvisorySourceConflictEntity).GetProperty("PairedSourceKey", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(AdvisorySourceConflictEntity).GetField("<PairedSourceKey>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
pairedSourceKey.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
pairedSourceKey.AddAnnotation("Relational:ColumnName", "paired_source_key");
var resolvedAt = runtimeEntityType.AddProperty(
"ResolvedAt",
typeof(DateTimeOffset?),
propertyInfo: typeof(AdvisorySourceConflictEntity).GetProperty("ResolvedAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(AdvisorySourceConflictEntity).GetField("<ResolvedAt>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
resolvedAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
resolvedAt.AddAnnotation("Relational:ColumnName", "resolved_at");
var severity = runtimeEntityType.AddProperty(
"Severity",
typeof(string),
propertyInfo: typeof(AdvisorySourceConflictEntity).GetProperty("Severity", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(AdvisorySourceConflictEntity).GetField("<Severity>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
severity.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
severity.AddAnnotation("Relational:ColumnName", "severity");
var sourceFamily = runtimeEntityType.AddProperty(
"SourceFamily",
typeof(string),
propertyInfo: typeof(AdvisorySourceConflictEntity).GetProperty("SourceFamily", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(AdvisorySourceConflictEntity).GetField("<SourceFamily>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
sourceFamily.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
sourceFamily.AddAnnotation("Relational:ColumnName", "source_family");
var sourceKey = runtimeEntityType.AddProperty(
"SourceKey",
typeof(string),
propertyInfo: typeof(AdvisorySourceConflictEntity).GetProperty("SourceKey", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(AdvisorySourceConflictEntity).GetField("<SourceKey>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
sourceKey.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
sourceKey.AddAnnotation("Relational:ColumnName", "source_key");
var status = runtimeEntityType.AddProperty(
"Status",
typeof(string),
propertyInfo: typeof(AdvisorySourceConflictEntity).GetProperty("Status", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(AdvisorySourceConflictEntity).GetField("<Status>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
status.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
status.AddAnnotation("Relational:ColumnName", "status");
var tenantId = runtimeEntityType.AddProperty(
"TenantId",
typeof(string),
propertyInfo: typeof(AdvisorySourceConflictEntity).GetProperty("TenantId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(AdvisorySourceConflictEntity).GetField("<TenantId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
tenantId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
tenantId.AddAnnotation("Relational:ColumnName", "tenant_id");
var updatedAt = runtimeEntityType.AddProperty(
"UpdatedAt",
typeof(DateTimeOffset),
propertyInfo: typeof(AdvisorySourceConflictEntity).GetProperty("UpdatedAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(AdvisorySourceConflictEntity).GetField("<UpdatedAt>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
sentinel: new DateTimeOffset(new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 0, 0, 0, 0)));
updatedAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
updatedAt.AddAnnotation("Relational:ColumnName", "updated_at");
updatedAt.AddAnnotation("Relational:DefaultValueSql", "now()");
var updatedBy = runtimeEntityType.AddProperty(
"UpdatedBy",
typeof(string),
propertyInfo: typeof(AdvisorySourceConflictEntity).GetProperty("UpdatedBy", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(AdvisorySourceConflictEntity).GetField("<UpdatedBy>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
updatedBy.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
updatedBy.AddAnnotation("Relational:ColumnName", "updated_by");
var key = runtimeEntityType.AddKey(
new[] { conflictId });
runtimeEntityType.SetPrimaryKey(key);
key.AddAnnotation("Relational:Name", "advisory_source_conflicts_pkey");
return runtimeEntityType;
}
public static void CreateAnnotations(RuntimeEntityType runtimeEntityType)
{
runtimeEntityType.AddAnnotation("Relational:FunctionName", null);
runtimeEntityType.AddAnnotation("Relational:Schema", "policy");
runtimeEntityType.AddAnnotation("Relational:SqlQuery", null);
runtimeEntityType.AddAnnotation("Relational:TableName", "advisory_source_conflicts");
runtimeEntityType.AddAnnotation("Relational:ViewName", null);
runtimeEntityType.AddAnnotation("Relational:ViewSchema", null);
Customize(runtimeEntityType);
}
static partial void Customize(RuntimeEntityType runtimeEntityType);
}
}

View File

@@ -0,0 +1,154 @@
// <auto-generated />
using System;
using System.Reflection;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
using StellaOps.Policy.Persistence.Postgres.Models;
#pragma warning disable 219, 612, 618
#nullable disable
namespace StellaOps.Policy.Persistence.EfCore.CompiledModels
{
[EntityFrameworkInternal]
public partial class AdvisorySourceImpactEntityEntityType
{
public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null)
{
var runtimeEntityType = model.AddEntityType(
"StellaOps.Policy.Persistence.Postgres.Models.AdvisorySourceImpactEntity",
typeof(AdvisorySourceImpactEntity),
baseEntityType,
propertyCount: 12,
keyCount: 1);
var id = runtimeEntityType.AddProperty(
"Id",
typeof(Guid),
propertyInfo: typeof(AdvisorySourceImpactEntity).GetProperty("Id", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(AdvisorySourceImpactEntity).GetField("<Id>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
afterSaveBehavior: PropertySaveBehavior.Throw,
sentinel: new Guid("00000000-0000-0000-0000-000000000000"));
id.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
id.AddAnnotation("Relational:ColumnName", "id");
id.AddAnnotation("Relational:DefaultValueSql", "gen_random_uuid()");
var decisionRefs = runtimeEntityType.AddProperty(
"DecisionRefs",
typeof(string),
propertyInfo: typeof(AdvisorySourceImpactEntity).GetProperty("DecisionRefs", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(AdvisorySourceImpactEntity).GetField("<DecisionRefs>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
decisionRefs.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
decisionRefs.AddAnnotation("Relational:ColumnName", "decision_refs");
decisionRefs.AddAnnotation("Relational:ColumnType", "jsonb");
var environment = runtimeEntityType.AddProperty(
"Environment",
typeof(string),
propertyInfo: typeof(AdvisorySourceImpactEntity).GetProperty("Environment", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(AdvisorySourceImpactEntity).GetField("<Environment>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
environment.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
environment.AddAnnotation("Relational:ColumnName", "environment");
var impactSeverity = runtimeEntityType.AddProperty(
"ImpactSeverity",
typeof(string),
propertyInfo: typeof(AdvisorySourceImpactEntity).GetProperty("ImpactSeverity", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(AdvisorySourceImpactEntity).GetField("<ImpactSeverity>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
impactSeverity.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
impactSeverity.AddAnnotation("Relational:ColumnName", "impact_severity");
var impactedDecisionsCount = runtimeEntityType.AddProperty(
"ImpactedDecisionsCount",
typeof(int),
propertyInfo: typeof(AdvisorySourceImpactEntity).GetProperty("ImpactedDecisionsCount", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(AdvisorySourceImpactEntity).GetField("<ImpactedDecisionsCount>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
sentinel: 0);
impactedDecisionsCount.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
impactedDecisionsCount.AddAnnotation("Relational:ColumnName", "impacted_decisions_count");
var lastDecisionAt = runtimeEntityType.AddProperty(
"LastDecisionAt",
typeof(DateTimeOffset?),
propertyInfo: typeof(AdvisorySourceImpactEntity).GetProperty("LastDecisionAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(AdvisorySourceImpactEntity).GetField("<LastDecisionAt>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
lastDecisionAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
lastDecisionAt.AddAnnotation("Relational:ColumnName", "last_decision_at");
var region = runtimeEntityType.AddProperty(
"Region",
typeof(string),
propertyInfo: typeof(AdvisorySourceImpactEntity).GetProperty("Region", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(AdvisorySourceImpactEntity).GetField("<Region>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
region.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
region.AddAnnotation("Relational:ColumnName", "region");
var sourceFamily = runtimeEntityType.AddProperty(
"SourceFamily",
typeof(string),
propertyInfo: typeof(AdvisorySourceImpactEntity).GetProperty("SourceFamily", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(AdvisorySourceImpactEntity).GetField("<SourceFamily>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
sourceFamily.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
sourceFamily.AddAnnotation("Relational:ColumnName", "source_family");
var sourceKey = runtimeEntityType.AddProperty(
"SourceKey",
typeof(string),
propertyInfo: typeof(AdvisorySourceImpactEntity).GetProperty("SourceKey", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(AdvisorySourceImpactEntity).GetField("<SourceKey>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
sourceKey.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
sourceKey.AddAnnotation("Relational:ColumnName", "source_key");
var tenantId = runtimeEntityType.AddProperty(
"TenantId",
typeof(string),
propertyInfo: typeof(AdvisorySourceImpactEntity).GetProperty("TenantId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(AdvisorySourceImpactEntity).GetField("<TenantId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
tenantId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
tenantId.AddAnnotation("Relational:ColumnName", "tenant_id");
var updatedAt = runtimeEntityType.AddProperty(
"UpdatedAt",
typeof(DateTimeOffset),
propertyInfo: typeof(AdvisorySourceImpactEntity).GetProperty("UpdatedAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(AdvisorySourceImpactEntity).GetField("<UpdatedAt>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
sentinel: new DateTimeOffset(new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 0, 0, 0, 0)));
updatedAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
updatedAt.AddAnnotation("Relational:ColumnName", "updated_at");
updatedAt.AddAnnotation("Relational:DefaultValueSql", "now()");
var updatedBy = runtimeEntityType.AddProperty(
"UpdatedBy",
typeof(string),
propertyInfo: typeof(AdvisorySourceImpactEntity).GetProperty("UpdatedBy", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(AdvisorySourceImpactEntity).GetField("<UpdatedBy>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
updatedBy.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
updatedBy.AddAnnotation("Relational:ColumnName", "updated_by");
var key = runtimeEntityType.AddKey(
new[] { id });
runtimeEntityType.SetPrimaryKey(key);
key.AddAnnotation("Relational:Name", "advisory_source_impacts_pkey");
return runtimeEntityType;
}
public static void CreateAnnotations(RuntimeEntityType runtimeEntityType)
{
runtimeEntityType.AddAnnotation("Relational:FunctionName", null);
runtimeEntityType.AddAnnotation("Relational:Schema", "policy");
runtimeEntityType.AddAnnotation("Relational:SqlQuery", null);
runtimeEntityType.AddAnnotation("Relational:TableName", "advisory_source_impacts");
runtimeEntityType.AddAnnotation("Relational:ViewName", null);
runtimeEntityType.AddAnnotation("Relational:ViewSchema", null);
Customize(runtimeEntityType);
}
static partial void Customize(RuntimeEntityType runtimeEntityType);
}
}

View File

@@ -0,0 +1,156 @@
// <auto-generated />
using System;
using System.Reflection;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
using StellaOps.Policy.Persistence.Postgres.Models;
#pragma warning disable 219, 612, 618
#nullable disable
namespace StellaOps.Policy.Persistence.EfCore.CompiledModels
{
[EntityFrameworkInternal]
public partial class BudgetEntryEntityEntityType
{
public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null)
{
var runtimeEntityType = model.AddEntityType(
"StellaOps.Policy.Persistence.Postgres.Models.BudgetEntryEntity",
typeof(BudgetEntryEntity),
baseEntityType,
propertyCount: 10,
namedIndexCount: 3,
keyCount: 1);
var entryId = runtimeEntityType.AddProperty(
"EntryId",
typeof(string),
propertyInfo: typeof(BudgetEntryEntity).GetProperty("EntryId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(BudgetEntryEntity).GetField("<EntryId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
afterSaveBehavior: PropertySaveBehavior.Throw,
maxLength: 64);
entryId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
entryId.AddAnnotation("Relational:ColumnName", "entry_id");
var consumedAt = runtimeEntityType.AddProperty(
"ConsumedAt",
typeof(DateTimeOffset),
propertyInfo: typeof(BudgetEntryEntity).GetProperty("ConsumedAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(BudgetEntryEntity).GetField("<ConsumedAt>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
sentinel: new DateTimeOffset(new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 0, 0, 0, 0)));
consumedAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
consumedAt.AddAnnotation("Relational:ColumnName", "consumed_at");
consumedAt.AddAnnotation("Relational:DefaultValueSql", "now()");
var consumedBy = runtimeEntityType.AddProperty(
"ConsumedBy",
typeof(string),
propertyInfo: typeof(BudgetEntryEntity).GetProperty("ConsumedBy", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(BudgetEntryEntity).GetField("<ConsumedBy>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true,
maxLength: 256);
consumedBy.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
consumedBy.AddAnnotation("Relational:ColumnName", "consumed_by");
var isException = runtimeEntityType.AddProperty(
"IsException",
typeof(bool),
propertyInfo: typeof(BudgetEntryEntity).GetProperty("IsException", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(BudgetEntryEntity).GetField("<IsException>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
sentinel: false);
isException.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
isException.AddAnnotation("Relational:ColumnName", "is_exception");
var penaltyPoints = runtimeEntityType.AddProperty(
"PenaltyPoints",
typeof(int),
propertyInfo: typeof(BudgetEntryEntity).GetProperty("PenaltyPoints", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(BudgetEntryEntity).GetField("<PenaltyPoints>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
sentinel: 0);
penaltyPoints.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
penaltyPoints.AddAnnotation("Relational:ColumnName", "penalty_points");
var reason = runtimeEntityType.AddProperty(
"Reason",
typeof(string),
propertyInfo: typeof(BudgetEntryEntity).GetProperty("Reason", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(BudgetEntryEntity).GetField("<Reason>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true,
maxLength: 512);
reason.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
reason.AddAnnotation("Relational:ColumnName", "reason");
var releaseId = runtimeEntityType.AddProperty(
"ReleaseId",
typeof(string),
propertyInfo: typeof(BudgetEntryEntity).GetProperty("ReleaseId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(BudgetEntryEntity).GetField("<ReleaseId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
maxLength: 128);
releaseId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
releaseId.AddAnnotation("Relational:ColumnName", "release_id");
var riskPoints = runtimeEntityType.AddProperty(
"RiskPoints",
typeof(int),
propertyInfo: typeof(BudgetEntryEntity).GetProperty("RiskPoints", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(BudgetEntryEntity).GetField("<RiskPoints>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
sentinel: 0);
riskPoints.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
riskPoints.AddAnnotation("Relational:ColumnName", "risk_points");
var serviceId = runtimeEntityType.AddProperty(
"ServiceId",
typeof(string),
propertyInfo: typeof(BudgetEntryEntity).GetProperty("ServiceId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(BudgetEntryEntity).GetField("<ServiceId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
maxLength: 128);
serviceId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
serviceId.AddAnnotation("Relational:ColumnName", "service_id");
var window = runtimeEntityType.AddProperty(
"Window",
typeof(string),
propertyInfo: typeof(BudgetEntryEntity).GetProperty("Window", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(BudgetEntryEntity).GetField("<Window>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
maxLength: 16);
window.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
window.AddAnnotation("Relational:ColumnName", "window");
var key = runtimeEntityType.AddKey(
new[] { entryId });
runtimeEntityType.SetPrimaryKey(key);
key.AddAnnotation("Relational:Name", "budget_entries_pkey");
var idx_budget_entries_consumed_at = runtimeEntityType.AddIndex(
new[] { consumedAt },
name: "idx_budget_entries_consumed_at");
var idx_budget_entries_release_id = runtimeEntityType.AddIndex(
new[] { releaseId },
name: "idx_budget_entries_release_id");
var idx_budget_entries_service_window = runtimeEntityType.AddIndex(
new[] { serviceId, window },
name: "idx_budget_entries_service_window");
return runtimeEntityType;
}
public static void CreateAnnotations(RuntimeEntityType runtimeEntityType)
{
runtimeEntityType.AddAnnotation("Relational:FunctionName", null);
runtimeEntityType.AddAnnotation("Relational:Schema", "policy");
runtimeEntityType.AddAnnotation("Relational:SqlQuery", null);
runtimeEntityType.AddAnnotation("Relational:TableName", "budget_entries");
runtimeEntityType.AddAnnotation("Relational:ViewName", null);
runtimeEntityType.AddAnnotation("Relational:ViewSchema", null);
Customize(runtimeEntityType);
}
static partial void Customize(RuntimeEntityType runtimeEntityType);
}
}

View File

@@ -0,0 +1,167 @@
// <auto-generated />
using System;
using System.Reflection;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
using StellaOps.Policy.Persistence.Postgres.Models;
#pragma warning disable 219, 612, 618
#nullable disable
namespace StellaOps.Policy.Persistence.EfCore.CompiledModels
{
[EntityFrameworkInternal]
public partial class BudgetLedgerEntityEntityType
{
public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null)
{
var runtimeEntityType = model.AddEntityType(
"StellaOps.Policy.Persistence.Postgres.Models.BudgetLedgerEntity",
typeof(BudgetLedgerEntity),
baseEntityType,
propertyCount: 10,
unnamedIndexCount: 1,
namedIndexCount: 4,
keyCount: 1);
var budgetId = runtimeEntityType.AddProperty(
"BudgetId",
typeof(string),
propertyInfo: typeof(BudgetLedgerEntity).GetProperty("BudgetId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(BudgetLedgerEntity).GetField("<BudgetId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
afterSaveBehavior: PropertySaveBehavior.Throw,
maxLength: 256);
budgetId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
budgetId.AddAnnotation("Relational:ColumnName", "budget_id");
var allocated = runtimeEntityType.AddProperty(
"Allocated",
typeof(int),
propertyInfo: typeof(BudgetLedgerEntity).GetProperty("Allocated", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(BudgetLedgerEntity).GetField("<Allocated>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
sentinel: 0);
allocated.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
allocated.AddAnnotation("Relational:ColumnName", "allocated");
var consumed = runtimeEntityType.AddProperty(
"Consumed",
typeof(int),
propertyInfo: typeof(BudgetLedgerEntity).GetProperty("Consumed", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(BudgetLedgerEntity).GetField("<Consumed>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
sentinel: 0);
consumed.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
consumed.AddAnnotation("Relational:ColumnName", "consumed");
var createdAt = runtimeEntityType.AddProperty(
"CreatedAt",
typeof(DateTimeOffset),
propertyInfo: typeof(BudgetLedgerEntity).GetProperty("CreatedAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(BudgetLedgerEntity).GetField("<CreatedAt>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
sentinel: new DateTimeOffset(new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 0, 0, 0, 0)));
createdAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
createdAt.AddAnnotation("Relational:ColumnName", "created_at");
createdAt.AddAnnotation("Relational:DefaultValueSql", "now()");
var serviceId = runtimeEntityType.AddProperty(
"ServiceId",
typeof(string),
propertyInfo: typeof(BudgetLedgerEntity).GetProperty("ServiceId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(BudgetLedgerEntity).GetField("<ServiceId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
maxLength: 128);
serviceId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
serviceId.AddAnnotation("Relational:ColumnName", "service_id");
var status = runtimeEntityType.AddProperty(
"Status",
typeof(string),
propertyInfo: typeof(BudgetLedgerEntity).GetProperty("Status", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(BudgetLedgerEntity).GetField("<Status>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
maxLength: 16);
status.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
status.AddAnnotation("Relational:ColumnName", "status");
var tenantId = runtimeEntityType.AddProperty(
"TenantId",
typeof(string),
propertyInfo: typeof(BudgetLedgerEntity).GetProperty("TenantId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(BudgetLedgerEntity).GetField("<TenantId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true,
maxLength: 64);
tenantId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
tenantId.AddAnnotation("Relational:ColumnName", "tenant_id");
var tier = runtimeEntityType.AddProperty(
"Tier",
typeof(int),
propertyInfo: typeof(BudgetLedgerEntity).GetProperty("Tier", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(BudgetLedgerEntity).GetField("<Tier>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
sentinel: 0);
tier.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
tier.AddAnnotation("Relational:ColumnName", "tier");
var updatedAt = runtimeEntityType.AddProperty(
"UpdatedAt",
typeof(DateTimeOffset),
propertyInfo: typeof(BudgetLedgerEntity).GetProperty("UpdatedAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(BudgetLedgerEntity).GetField("<UpdatedAt>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
sentinel: new DateTimeOffset(new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 0, 0, 0, 0)));
updatedAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
updatedAt.AddAnnotation("Relational:ColumnName", "updated_at");
updatedAt.AddAnnotation("Relational:DefaultValueSql", "now()");
var window = runtimeEntityType.AddProperty(
"Window",
typeof(string),
propertyInfo: typeof(BudgetLedgerEntity).GetProperty("Window", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(BudgetLedgerEntity).GetField("<Window>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
maxLength: 16);
window.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
window.AddAnnotation("Relational:ColumnName", "window");
var key = runtimeEntityType.AddKey(
new[] { budgetId });
runtimeEntityType.SetPrimaryKey(key);
key.AddAnnotation("Relational:Name", "budget_ledger_pkey");
var index = runtimeEntityType.AddIndex(
new[] { serviceId, window },
unique: true);
index.AddAnnotation("Relational:Name", "uq_budget_ledger_service_window");
var idx_budget_ledger_service_id = runtimeEntityType.AddIndex(
new[] { serviceId },
name: "idx_budget_ledger_service_id");
var idx_budget_ledger_status = runtimeEntityType.AddIndex(
new[] { status },
name: "idx_budget_ledger_status");
var idx_budget_ledger_tenant_id = runtimeEntityType.AddIndex(
new[] { tenantId },
name: "idx_budget_ledger_tenant_id");
var idx_budget_ledger_window = runtimeEntityType.AddIndex(
new[] { window },
name: "idx_budget_ledger_window");
return runtimeEntityType;
}
public static void CreateAnnotations(RuntimeEntityType runtimeEntityType)
{
runtimeEntityType.AddAnnotation("Relational:FunctionName", null);
runtimeEntityType.AddAnnotation("Relational:Schema", "policy");
runtimeEntityType.AddAnnotation("Relational:SqlQuery", null);
runtimeEntityType.AddAnnotation("Relational:TableName", "budget_ledger");
runtimeEntityType.AddAnnotation("Relational:ViewName", null);
runtimeEntityType.AddAnnotation("Relational:ViewSchema", null);
Customize(runtimeEntityType);
}
static partial void Customize(RuntimeEntityType runtimeEntityType);
}
}

View File

@@ -0,0 +1,196 @@
// <auto-generated />
using System;
using System.Reflection;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
using StellaOps.Policy.Persistence.Postgres.Models;
#pragma warning disable 219, 612, 618
#nullable disable
namespace StellaOps.Policy.Persistence.EfCore.CompiledModels
{
[EntityFrameworkInternal]
public partial class ConflictEntityEntityType
{
public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null)
{
var runtimeEntityType = model.AddEntityType(
"StellaOps.Policy.Persistence.Postgres.Models.ConflictEntity",
typeof(ConflictEntity),
baseEntityType,
propertyCount: 15,
namedIndexCount: 3,
keyCount: 1);
var id = runtimeEntityType.AddProperty(
"Id",
typeof(Guid),
propertyInfo: typeof(ConflictEntity).GetProperty("Id", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ConflictEntity).GetField("<Id>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
afterSaveBehavior: PropertySaveBehavior.Throw,
sentinel: new Guid("00000000-0000-0000-0000-000000000000"));
id.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
id.AddAnnotation("Relational:ColumnName", "id");
id.AddAnnotation("Relational:DefaultValueSql", "gen_random_uuid()");
var affectedScope = runtimeEntityType.AddProperty(
"AffectedScope",
typeof(string),
propertyInfo: typeof(ConflictEntity).GetProperty("AffectedScope", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ConflictEntity).GetField("<AffectedScope>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
affectedScope.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
affectedScope.AddAnnotation("Relational:ColumnName", "affected_scope");
var conflictType = runtimeEntityType.AddProperty(
"ConflictType",
typeof(string),
propertyInfo: typeof(ConflictEntity).GetProperty("ConflictType", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ConflictEntity).GetField("<ConflictType>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
conflictType.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
conflictType.AddAnnotation("Relational:ColumnName", "conflict_type");
var createdAt = runtimeEntityType.AddProperty(
"CreatedAt",
typeof(DateTimeOffset),
propertyInfo: typeof(ConflictEntity).GetProperty("CreatedAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ConflictEntity).GetField("<CreatedAt>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
sentinel: new DateTimeOffset(new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 0, 0, 0, 0)));
createdAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
createdAt.AddAnnotation("Relational:ColumnName", "created_at");
createdAt.AddAnnotation("Relational:DefaultValueSql", "now()");
var createdBy = runtimeEntityType.AddProperty(
"CreatedBy",
typeof(string),
propertyInfo: typeof(ConflictEntity).GetProperty("CreatedBy", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ConflictEntity).GetField("<CreatedBy>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
createdBy.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
createdBy.AddAnnotation("Relational:ColumnName", "created_by");
var description = runtimeEntityType.AddProperty(
"Description",
typeof(string),
propertyInfo: typeof(ConflictEntity).GetProperty("Description", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ConflictEntity).GetField("<Description>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
description.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
description.AddAnnotation("Relational:ColumnName", "description");
var leftRuleId = runtimeEntityType.AddProperty(
"LeftRuleId",
typeof(string),
propertyInfo: typeof(ConflictEntity).GetProperty("LeftRuleId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ConflictEntity).GetField("<LeftRuleId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
leftRuleId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
leftRuleId.AddAnnotation("Relational:ColumnName", "left_rule_id");
var metadata = runtimeEntityType.AddProperty(
"Metadata",
typeof(string),
propertyInfo: typeof(ConflictEntity).GetProperty("Metadata", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ConflictEntity).GetField("<Metadata>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
metadata.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
metadata.AddAnnotation("Relational:ColumnName", "metadata");
metadata.AddAnnotation("Relational:ColumnType", "jsonb");
var resolution = runtimeEntityType.AddProperty(
"Resolution",
typeof(string),
propertyInfo: typeof(ConflictEntity).GetProperty("Resolution", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ConflictEntity).GetField("<Resolution>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
resolution.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
resolution.AddAnnotation("Relational:ColumnName", "resolution");
var resolvedAt = runtimeEntityType.AddProperty(
"ResolvedAt",
typeof(DateTimeOffset?),
propertyInfo: typeof(ConflictEntity).GetProperty("ResolvedAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ConflictEntity).GetField("<ResolvedAt>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
resolvedAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
resolvedAt.AddAnnotation("Relational:ColumnName", "resolved_at");
var resolvedBy = runtimeEntityType.AddProperty(
"ResolvedBy",
typeof(string),
propertyInfo: typeof(ConflictEntity).GetProperty("ResolvedBy", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ConflictEntity).GetField("<ResolvedBy>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
resolvedBy.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
resolvedBy.AddAnnotation("Relational:ColumnName", "resolved_by");
var rightRuleId = runtimeEntityType.AddProperty(
"RightRuleId",
typeof(string),
propertyInfo: typeof(ConflictEntity).GetProperty("RightRuleId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ConflictEntity).GetField("<RightRuleId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
rightRuleId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
rightRuleId.AddAnnotation("Relational:ColumnName", "right_rule_id");
var severity = runtimeEntityType.AddProperty(
"Severity",
typeof(string),
propertyInfo: typeof(ConflictEntity).GetProperty("Severity", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ConflictEntity).GetField("<Severity>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
severity.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
severity.AddAnnotation("Relational:ColumnName", "severity");
var status = runtimeEntityType.AddProperty(
"Status",
typeof(string),
propertyInfo: typeof(ConflictEntity).GetProperty("Status", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ConflictEntity).GetField("<Status>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
status.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
status.AddAnnotation("Relational:ColumnName", "status");
var tenantId = runtimeEntityType.AddProperty(
"TenantId",
typeof(string),
propertyInfo: typeof(ConflictEntity).GetProperty("TenantId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ConflictEntity).GetField("<TenantId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
tenantId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
tenantId.AddAnnotation("Relational:ColumnName", "tenant_id");
var key = runtimeEntityType.AddKey(
new[] { id });
runtimeEntityType.SetPrimaryKey(key);
key.AddAnnotation("Relational:Name", "conflicts_pkey");
var idx_conflicts_status = runtimeEntityType.AddIndex(
new[] { tenantId, status },
name: "idx_conflicts_status");
var idx_conflicts_tenant = runtimeEntityType.AddIndex(
new[] { tenantId },
name: "idx_conflicts_tenant");
var idx_conflicts_type = runtimeEntityType.AddIndex(
new[] { conflictType },
name: "idx_conflicts_type");
return runtimeEntityType;
}
public static void CreateAnnotations(RuntimeEntityType runtimeEntityType)
{
runtimeEntityType.AddAnnotation("Relational:FunctionName", null);
runtimeEntityType.AddAnnotation("Relational:Schema", "policy");
runtimeEntityType.AddAnnotation("Relational:SqlQuery", null);
runtimeEntityType.AddAnnotation("Relational:TableName", "conflicts");
runtimeEntityType.AddAnnotation("Relational:ViewName", null);
runtimeEntityType.AddAnnotation("Relational:ViewSchema", null);
Customize(runtimeEntityType);
}
static partial void Customize(RuntimeEntityType runtimeEntityType);
}
}

View File

@@ -0,0 +1,287 @@
// <auto-generated />
using System;
using System.Reflection;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
using StellaOps.Policy.Persistence.Postgres.Models;
#pragma warning disable 219, 612, 618
#nullable disable
namespace StellaOps.Policy.Persistence.EfCore.CompiledModels
{
[EntityFrameworkInternal]
public partial class EvaluationRunEntityEntityType
{
public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null)
{
var runtimeEntityType = model.AddEntityType(
"StellaOps.Policy.Persistence.Postgres.Models.EvaluationRunEntity",
typeof(EvaluationRunEntity),
baseEntityType,
propertyCount: 23,
namedIndexCount: 5,
keyCount: 1);
var id = runtimeEntityType.AddProperty(
"Id",
typeof(Guid),
propertyInfo: typeof(EvaluationRunEntity).GetProperty("Id", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(EvaluationRunEntity).GetField("<Id>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
afterSaveBehavior: PropertySaveBehavior.Throw,
sentinel: new Guid("00000000-0000-0000-0000-000000000000"));
id.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
id.AddAnnotation("Relational:ColumnName", "id");
id.AddAnnotation("Relational:DefaultValueSql", "gen_random_uuid()");
var artifactId = runtimeEntityType.AddProperty(
"ArtifactId",
typeof(string),
propertyInfo: typeof(EvaluationRunEntity).GetProperty("ArtifactId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(EvaluationRunEntity).GetField("<ArtifactId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
artifactId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
artifactId.AddAnnotation("Relational:ColumnName", "artifact_id");
var completedAt = runtimeEntityType.AddProperty(
"CompletedAt",
typeof(DateTimeOffset?),
propertyInfo: typeof(EvaluationRunEntity).GetProperty("CompletedAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(EvaluationRunEntity).GetField("<CompletedAt>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
completedAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
completedAt.AddAnnotation("Relational:ColumnName", "completed_at");
var createdAt = runtimeEntityType.AddProperty(
"CreatedAt",
typeof(DateTimeOffset),
propertyInfo: typeof(EvaluationRunEntity).GetProperty("CreatedAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(EvaluationRunEntity).GetField("<CreatedAt>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
sentinel: new DateTimeOffset(new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 0, 0, 0, 0)));
createdAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
createdAt.AddAnnotation("Relational:ColumnName", "created_at");
createdAt.AddAnnotation("Relational:DefaultValueSql", "now()");
var createdBy = runtimeEntityType.AddProperty(
"CreatedBy",
typeof(string),
propertyInfo: typeof(EvaluationRunEntity).GetProperty("CreatedBy", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(EvaluationRunEntity).GetField("<CreatedBy>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
createdBy.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
createdBy.AddAnnotation("Relational:ColumnName", "created_by");
var criticalCount = runtimeEntityType.AddProperty(
"CriticalCount",
typeof(int),
propertyInfo: typeof(EvaluationRunEntity).GetProperty("CriticalCount", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(EvaluationRunEntity).GetField("<CriticalCount>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
sentinel: 0);
criticalCount.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
criticalCount.AddAnnotation("Relational:ColumnName", "critical_count");
var durationMs = runtimeEntityType.AddProperty(
"DurationMs",
typeof(int?),
propertyInfo: typeof(EvaluationRunEntity).GetProperty("DurationMs", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(EvaluationRunEntity).GetField("<DurationMs>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
durationMs.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
durationMs.AddAnnotation("Relational:ColumnName", "duration_ms");
var errorMessage = runtimeEntityType.AddProperty(
"ErrorMessage",
typeof(string),
propertyInfo: typeof(EvaluationRunEntity).GetProperty("ErrorMessage", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(EvaluationRunEntity).GetField("<ErrorMessage>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
errorMessage.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
errorMessage.AddAnnotation("Relational:ColumnName", "error_message");
var findingsCount = runtimeEntityType.AddProperty(
"FindingsCount",
typeof(int),
propertyInfo: typeof(EvaluationRunEntity).GetProperty("FindingsCount", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(EvaluationRunEntity).GetField("<FindingsCount>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
sentinel: 0);
findingsCount.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
findingsCount.AddAnnotation("Relational:ColumnName", "findings_count");
var highCount = runtimeEntityType.AddProperty(
"HighCount",
typeof(int),
propertyInfo: typeof(EvaluationRunEntity).GetProperty("HighCount", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(EvaluationRunEntity).GetField("<HighCount>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
sentinel: 0);
highCount.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
highCount.AddAnnotation("Relational:ColumnName", "high_count");
var inputHash = runtimeEntityType.AddProperty(
"InputHash",
typeof(string),
propertyInfo: typeof(EvaluationRunEntity).GetProperty("InputHash", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(EvaluationRunEntity).GetField("<InputHash>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
inputHash.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
inputHash.AddAnnotation("Relational:ColumnName", "input_hash");
var lowCount = runtimeEntityType.AddProperty(
"LowCount",
typeof(int),
propertyInfo: typeof(EvaluationRunEntity).GetProperty("LowCount", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(EvaluationRunEntity).GetField("<LowCount>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
sentinel: 0);
lowCount.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
lowCount.AddAnnotation("Relational:ColumnName", "low_count");
var mediumCount = runtimeEntityType.AddProperty(
"MediumCount",
typeof(int),
propertyInfo: typeof(EvaluationRunEntity).GetProperty("MediumCount", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(EvaluationRunEntity).GetField("<MediumCount>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
sentinel: 0);
mediumCount.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
mediumCount.AddAnnotation("Relational:ColumnName", "medium_count");
var metadata = runtimeEntityType.AddProperty(
"Metadata",
typeof(string),
propertyInfo: typeof(EvaluationRunEntity).GetProperty("Metadata", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(EvaluationRunEntity).GetField("<Metadata>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
metadata.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
metadata.AddAnnotation("Relational:ColumnName", "metadata");
metadata.AddAnnotation("Relational:ColumnType", "jsonb");
var packId = runtimeEntityType.AddProperty(
"PackId",
typeof(Guid?),
propertyInfo: typeof(EvaluationRunEntity).GetProperty("PackId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(EvaluationRunEntity).GetField("<PackId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
packId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
packId.AddAnnotation("Relational:ColumnName", "pack_id");
var packVersion = runtimeEntityType.AddProperty(
"PackVersion",
typeof(int?),
propertyInfo: typeof(EvaluationRunEntity).GetProperty("PackVersion", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(EvaluationRunEntity).GetField("<PackVersion>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
packVersion.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
packVersion.AddAnnotation("Relational:ColumnName", "pack_version");
var projectId = runtimeEntityType.AddProperty(
"ProjectId",
typeof(string),
propertyInfo: typeof(EvaluationRunEntity).GetProperty("ProjectId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(EvaluationRunEntity).GetField("<ProjectId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
projectId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
projectId.AddAnnotation("Relational:ColumnName", "project_id");
var result = runtimeEntityType.AddProperty(
"Result",
typeof(EvaluationResult?),
propertyInfo: typeof(EvaluationRunEntity).GetProperty("Result", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(EvaluationRunEntity).GetField("<Result>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
result.SetValueConverter(new ValueConverter<EvaluationResult, string>(
string (EvaluationResult v) => ((object)v).ToString().ToLowerInvariant(),
EvaluationResult (string v) => Enum.Parse<EvaluationResult>(v, true)));
result.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
result.AddAnnotation("Relational:ColumnName", "result");
var riskProfileId = runtimeEntityType.AddProperty(
"RiskProfileId",
typeof(Guid?),
propertyInfo: typeof(EvaluationRunEntity).GetProperty("RiskProfileId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(EvaluationRunEntity).GetField("<RiskProfileId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
riskProfileId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
riskProfileId.AddAnnotation("Relational:ColumnName", "risk_profile_id");
var score = runtimeEntityType.AddProperty(
"Score",
typeof(decimal?),
propertyInfo: typeof(EvaluationRunEntity).GetProperty("Score", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(EvaluationRunEntity).GetField("<Score>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
score.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
score.AddAnnotation("Relational:ColumnName", "score");
var startedAt = runtimeEntityType.AddProperty(
"StartedAt",
typeof(DateTimeOffset?),
propertyInfo: typeof(EvaluationRunEntity).GetProperty("StartedAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(EvaluationRunEntity).GetField("<StartedAt>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
startedAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
startedAt.AddAnnotation("Relational:ColumnName", "started_at");
var status = runtimeEntityType.AddProperty(
"Status",
typeof(EvaluationStatus),
propertyInfo: typeof(EvaluationRunEntity).GetProperty("Status", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(EvaluationRunEntity).GetField("<Status>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
status.SetValueConverter(new ValueConverter<EvaluationStatus, string>(
string (EvaluationStatus v) => ((object)v).ToString().ToLowerInvariant(),
EvaluationStatus (string v) => Enum.Parse<EvaluationStatus>(v, true)));
status.SetSentinelFromProviderValue("pending");
status.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
status.AddAnnotation("Relational:ColumnName", "status");
var tenantId = runtimeEntityType.AddProperty(
"TenantId",
typeof(string),
propertyInfo: typeof(EvaluationRunEntity).GetProperty("TenantId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(EvaluationRunEntity).GetField("<TenantId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
tenantId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
tenantId.AddAnnotation("Relational:ColumnName", "tenant_id");
var key = runtimeEntityType.AddKey(
new[] { id });
runtimeEntityType.SetPrimaryKey(key);
key.AddAnnotation("Relational:Name", "evaluation_runs_pkey");
var idx_evaluation_runs_artifact = runtimeEntityType.AddIndex(
new[] { tenantId, artifactId },
name: "idx_evaluation_runs_artifact");
var idx_evaluation_runs_created = runtimeEntityType.AddIndex(
new[] { tenantId, createdAt },
name: "idx_evaluation_runs_created");
var idx_evaluation_runs_project = runtimeEntityType.AddIndex(
new[] { tenantId, projectId },
name: "idx_evaluation_runs_project");
var idx_evaluation_runs_status = runtimeEntityType.AddIndex(
new[] { status },
name: "idx_evaluation_runs_status");
var idx_evaluation_runs_tenant = runtimeEntityType.AddIndex(
new[] { tenantId },
name: "idx_evaluation_runs_tenant");
return runtimeEntityType;
}
public static void CreateAnnotations(RuntimeEntityType runtimeEntityType)
{
runtimeEntityType.AddAnnotation("Relational:FunctionName", null);
runtimeEntityType.AddAnnotation("Relational:Schema", "policy");
runtimeEntityType.AddAnnotation("Relational:SqlQuery", null);
runtimeEntityType.AddAnnotation("Relational:TableName", "evaluation_runs");
runtimeEntityType.AddAnnotation("Relational:ViewName", null);
runtimeEntityType.AddAnnotation("Relational:ViewSchema", null);
Customize(runtimeEntityType);
}
static partial void Customize(RuntimeEntityType runtimeEntityType);
}
}

View File

@@ -0,0 +1,166 @@
// <auto-generated />
using System;
using System.Reflection;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
using StellaOps.Policy.Persistence.Postgres.Models;
#pragma warning disable 219, 612, 618
#nullable disable
namespace StellaOps.Policy.Persistence.EfCore.CompiledModels
{
[EntityFrameworkInternal]
public partial class ExceptionApprovalAuditEntityEntityType
{
public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null)
{
var runtimeEntityType = model.AddEntityType(
"StellaOps.Policy.Persistence.Postgres.Models.ExceptionApprovalAuditEntity",
typeof(ExceptionApprovalAuditEntity),
baseEntityType,
propertyCount: 12,
unnamedIndexCount: 1,
namedIndexCount: 1,
keyCount: 1);
var id = runtimeEntityType.AddProperty(
"Id",
typeof(Guid),
propertyInfo: typeof(ExceptionApprovalAuditEntity).GetProperty("Id", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalAuditEntity).GetField("<Id>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
afterSaveBehavior: PropertySaveBehavior.Throw,
sentinel: new Guid("00000000-0000-0000-0000-000000000000"));
id.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
id.AddAnnotation("Relational:ColumnName", "id");
id.AddAnnotation("Relational:DefaultValueSql", "gen_random_uuid()");
var actionType = runtimeEntityType.AddProperty(
"ActionType",
typeof(string),
propertyInfo: typeof(ExceptionApprovalAuditEntity).GetProperty("ActionType", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalAuditEntity).GetField("<ActionType>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
actionType.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
actionType.AddAnnotation("Relational:ColumnName", "action_type");
var actorId = runtimeEntityType.AddProperty(
"ActorId",
typeof(string),
propertyInfo: typeof(ExceptionApprovalAuditEntity).GetProperty("ActorId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalAuditEntity).GetField("<ActorId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
actorId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
actorId.AddAnnotation("Relational:ColumnName", "actor_id");
var clientInfo = runtimeEntityType.AddProperty(
"ClientInfo",
typeof(string),
propertyInfo: typeof(ExceptionApprovalAuditEntity).GetProperty("ClientInfo", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalAuditEntity).GetField("<ClientInfo>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
clientInfo.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
clientInfo.AddAnnotation("Relational:ColumnName", "client_info");
clientInfo.AddAnnotation("Relational:ColumnType", "jsonb");
var description = runtimeEntityType.AddProperty(
"Description",
typeof(string),
propertyInfo: typeof(ExceptionApprovalAuditEntity).GetProperty("Description", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalAuditEntity).GetField("<Description>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
description.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
description.AddAnnotation("Relational:ColumnName", "description");
var details = runtimeEntityType.AddProperty(
"Details",
typeof(string),
propertyInfo: typeof(ExceptionApprovalAuditEntity).GetProperty("Details", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalAuditEntity).GetField("<Details>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
details.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
details.AddAnnotation("Relational:ColumnName", "details");
details.AddAnnotation("Relational:ColumnType", "jsonb");
var newStatus = runtimeEntityType.AddProperty(
"NewStatus",
typeof(string),
propertyInfo: typeof(ExceptionApprovalAuditEntity).GetProperty("NewStatus", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalAuditEntity).GetField("<NewStatus>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
newStatus.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
newStatus.AddAnnotation("Relational:ColumnName", "new_status");
var occurredAt = runtimeEntityType.AddProperty(
"OccurredAt",
typeof(DateTimeOffset),
propertyInfo: typeof(ExceptionApprovalAuditEntity).GetProperty("OccurredAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalAuditEntity).GetField("<OccurredAt>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
sentinel: new DateTimeOffset(new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 0, 0, 0, 0)));
occurredAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
occurredAt.AddAnnotation("Relational:ColumnName", "occurred_at");
occurredAt.AddAnnotation("Relational:DefaultValueSql", "now()");
var previousStatus = runtimeEntityType.AddProperty(
"PreviousStatus",
typeof(string),
propertyInfo: typeof(ExceptionApprovalAuditEntity).GetProperty("PreviousStatus", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalAuditEntity).GetField("<PreviousStatus>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
previousStatus.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
previousStatus.AddAnnotation("Relational:ColumnName", "previous_status");
var requestId = runtimeEntityType.AddProperty(
"RequestId",
typeof(string),
propertyInfo: typeof(ExceptionApprovalAuditEntity).GetProperty("RequestId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalAuditEntity).GetField("<RequestId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
requestId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
requestId.AddAnnotation("Relational:ColumnName", "request_id");
var sequenceNumber = runtimeEntityType.AddProperty(
"SequenceNumber",
typeof(int),
propertyInfo: typeof(ExceptionApprovalAuditEntity).GetProperty("SequenceNumber", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalAuditEntity).GetField("<SequenceNumber>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
sentinel: 0);
sequenceNumber.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
sequenceNumber.AddAnnotation("Relational:ColumnName", "sequence_number");
var tenantId = runtimeEntityType.AddProperty(
"TenantId",
typeof(string),
propertyInfo: typeof(ExceptionApprovalAuditEntity).GetProperty("TenantId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalAuditEntity).GetField("<TenantId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
tenantId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
tenantId.AddAnnotation("Relational:ColumnName", "tenant_id");
var key = runtimeEntityType.AddKey(
new[] { id });
runtimeEntityType.SetPrimaryKey(key);
key.AddAnnotation("Relational:Name", "exception_approval_audit_pkey");
var index = runtimeEntityType.AddIndex(
new[] { requestId, sequenceNumber },
unique: true);
var idx_approval_audit_request = runtimeEntityType.AddIndex(
new[] { requestId },
name: "idx_approval_audit_request");
return runtimeEntityType;
}
public static void CreateAnnotations(RuntimeEntityType runtimeEntityType)
{
runtimeEntityType.AddAnnotation("Relational:FunctionName", null);
runtimeEntityType.AddAnnotation("Relational:Schema", "policy");
runtimeEntityType.AddAnnotation("Relational:SqlQuery", null);
runtimeEntityType.AddAnnotation("Relational:TableName", "exception_approval_audit");
runtimeEntityType.AddAnnotation("Relational:ViewName", null);
runtimeEntityType.AddAnnotation("Relational:ViewSchema", null);
Customize(runtimeEntityType);
}
static partial void Customize(RuntimeEntityType runtimeEntityType);
}
}

View File

@@ -0,0 +1,338 @@
// <auto-generated />
using System;
using System.Reflection;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
using StellaOps.Policy.Persistence.Postgres.Models;
#pragma warning disable 219, 612, 618
#nullable disable
namespace StellaOps.Policy.Persistence.EfCore.CompiledModels
{
[EntityFrameworkInternal]
public partial class ExceptionApprovalRequestEntityEntityType
{
public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null)
{
var runtimeEntityType = model.AddEntityType(
"StellaOps.Policy.Persistence.Postgres.Models.ExceptionApprovalRequestEntity",
typeof(ExceptionApprovalRequestEntity),
baseEntityType,
propertyCount: 30,
unnamedIndexCount: 1,
namedIndexCount: 2,
keyCount: 1);
var id = runtimeEntityType.AddProperty(
"Id",
typeof(Guid),
propertyInfo: typeof(ExceptionApprovalRequestEntity).GetProperty("Id", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalRequestEntity).GetField("<Id>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
afterSaveBehavior: PropertySaveBehavior.Throw,
sentinel: new Guid("00000000-0000-0000-0000-000000000000"));
id.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
id.AddAnnotation("Relational:ColumnName", "id");
id.AddAnnotation("Relational:DefaultValueSql", "gen_random_uuid()");
var approvedByIds = runtimeEntityType.AddProperty(
"ApprovedByIds",
typeof(string[]),
propertyInfo: typeof(ExceptionApprovalRequestEntity).GetProperty("ApprovedByIds", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalRequestEntity).GetField("<ApprovedByIds>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
var approvedByIdsElementType = approvedByIds.SetElementType(typeof(string));
approvedByIds.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
approvedByIds.AddAnnotation("Relational:ColumnName", "approved_by_ids");
var artifactDigest = runtimeEntityType.AddProperty(
"ArtifactDigest",
typeof(string),
propertyInfo: typeof(ExceptionApprovalRequestEntity).GetProperty("ArtifactDigest", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalRequestEntity).GetField("<ArtifactDigest>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
artifactDigest.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
artifactDigest.AddAnnotation("Relational:ColumnName", "artifact_digest");
var compensatingControls = runtimeEntityType.AddProperty(
"CompensatingControls",
typeof(string),
propertyInfo: typeof(ExceptionApprovalRequestEntity).GetProperty("CompensatingControls", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalRequestEntity).GetField("<CompensatingControls>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
compensatingControls.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
compensatingControls.AddAnnotation("Relational:ColumnName", "compensating_controls");
compensatingControls.AddAnnotation("Relational:ColumnType", "jsonb");
var createdAt = runtimeEntityType.AddProperty(
"CreatedAt",
typeof(DateTimeOffset),
propertyInfo: typeof(ExceptionApprovalRequestEntity).GetProperty("CreatedAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalRequestEntity).GetField("<CreatedAt>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
sentinel: new DateTimeOffset(new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 0, 0, 0, 0)));
createdAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
createdAt.AddAnnotation("Relational:ColumnName", "created_at");
createdAt.AddAnnotation("Relational:DefaultValueSql", "now()");
var environments = runtimeEntityType.AddProperty(
"Environments",
typeof(string[]),
propertyInfo: typeof(ExceptionApprovalRequestEntity).GetProperty("Environments", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalRequestEntity).GetField("<Environments>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
var environmentsElementType = environments.SetElementType(typeof(string));
environments.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
environments.AddAnnotation("Relational:ColumnName", "environments");
var evidenceRefs = runtimeEntityType.AddProperty(
"EvidenceRefs",
typeof(string),
propertyInfo: typeof(ExceptionApprovalRequestEntity).GetProperty("EvidenceRefs", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalRequestEntity).GetField("<EvidenceRefs>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
evidenceRefs.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
evidenceRefs.AddAnnotation("Relational:ColumnName", "evidence_refs");
evidenceRefs.AddAnnotation("Relational:ColumnType", "jsonb");
var exceptionExpiresAt = runtimeEntityType.AddProperty(
"ExceptionExpiresAt",
typeof(DateTimeOffset?),
propertyInfo: typeof(ExceptionApprovalRequestEntity).GetProperty("ExceptionExpiresAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalRequestEntity).GetField("<ExceptionExpiresAt>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
exceptionExpiresAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
exceptionExpiresAt.AddAnnotation("Relational:ColumnName", "exception_expires_at");
var exceptionId = runtimeEntityType.AddProperty(
"ExceptionId",
typeof(string),
propertyInfo: typeof(ExceptionApprovalRequestEntity).GetProperty("ExceptionId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalRequestEntity).GetField("<ExceptionId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
exceptionId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
exceptionId.AddAnnotation("Relational:ColumnName", "exception_id");
var gateLevel = runtimeEntityType.AddProperty(
"GateLevel",
typeof(GateLevel),
propertyInfo: typeof(ExceptionApprovalRequestEntity).GetProperty("GateLevel", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalRequestEntity).GetField("<GateLevel>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
providerPropertyType: typeof(int));
gateLevel.SetSentinelFromProviderValue(0);
gateLevel.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
gateLevel.AddAnnotation("Relational:ColumnName", "gate_level");
var imagePattern = runtimeEntityType.AddProperty(
"ImagePattern",
typeof(string),
propertyInfo: typeof(ExceptionApprovalRequestEntity).GetProperty("ImagePattern", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalRequestEntity).GetField("<ImagePattern>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
imagePattern.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
imagePattern.AddAnnotation("Relational:ColumnName", "image_pattern");
var justification = runtimeEntityType.AddProperty(
"Justification",
typeof(string),
propertyInfo: typeof(ExceptionApprovalRequestEntity).GetProperty("Justification", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalRequestEntity).GetField("<Justification>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
justification.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
justification.AddAnnotation("Relational:ColumnName", "justification");
var metadata = runtimeEntityType.AddProperty(
"Metadata",
typeof(string),
propertyInfo: typeof(ExceptionApprovalRequestEntity).GetProperty("Metadata", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalRequestEntity).GetField("<Metadata>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
metadata.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
metadata.AddAnnotation("Relational:ColumnName", "metadata");
metadata.AddAnnotation("Relational:ColumnType", "jsonb");
var purlPattern = runtimeEntityType.AddProperty(
"PurlPattern",
typeof(string),
propertyInfo: typeof(ExceptionApprovalRequestEntity).GetProperty("PurlPattern", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalRequestEntity).GetField("<PurlPattern>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
purlPattern.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
purlPattern.AddAnnotation("Relational:ColumnName", "purl_pattern");
var rationale = runtimeEntityType.AddProperty(
"Rationale",
typeof(string),
propertyInfo: typeof(ExceptionApprovalRequestEntity).GetProperty("Rationale", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalRequestEntity).GetField("<Rationale>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
rationale.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
rationale.AddAnnotation("Relational:ColumnName", "rationale");
var reasonCode = runtimeEntityType.AddProperty(
"ReasonCode",
typeof(ExceptionReasonCode),
propertyInfo: typeof(ExceptionApprovalRequestEntity).GetProperty("ReasonCode", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalRequestEntity).GetField("<ReasonCode>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
providerPropertyType: typeof(string));
reasonCode.SetSentinelFromProviderValue("FalsePositive");
reasonCode.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
reasonCode.AddAnnotation("Relational:ColumnName", "reason_code");
var rejectedById = runtimeEntityType.AddProperty(
"RejectedById",
typeof(string),
propertyInfo: typeof(ExceptionApprovalRequestEntity).GetProperty("RejectedById", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalRequestEntity).GetField("<RejectedById>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
rejectedById.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
rejectedById.AddAnnotation("Relational:ColumnName", "rejected_by_id");
var rejectionReason = runtimeEntityType.AddProperty(
"RejectionReason",
typeof(string),
propertyInfo: typeof(ExceptionApprovalRequestEntity).GetProperty("RejectionReason", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalRequestEntity).GetField("<RejectionReason>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
rejectionReason.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
rejectionReason.AddAnnotation("Relational:ColumnName", "rejection_reason");
var requestExpiresAt = runtimeEntityType.AddProperty(
"RequestExpiresAt",
typeof(DateTimeOffset),
propertyInfo: typeof(ExceptionApprovalRequestEntity).GetProperty("RequestExpiresAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalRequestEntity).GetField("<RequestExpiresAt>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
sentinel: new DateTimeOffset(new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 0, 0, 0, 0)));
requestExpiresAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
requestExpiresAt.AddAnnotation("Relational:ColumnName", "request_expires_at");
var requestId = runtimeEntityType.AddProperty(
"RequestId",
typeof(string),
propertyInfo: typeof(ExceptionApprovalRequestEntity).GetProperty("RequestId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalRequestEntity).GetField("<RequestId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
requestId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
requestId.AddAnnotation("Relational:ColumnName", "request_id");
var requestedTtlDays = runtimeEntityType.AddProperty(
"RequestedTtlDays",
typeof(int),
propertyInfo: typeof(ExceptionApprovalRequestEntity).GetProperty("RequestedTtlDays", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalRequestEntity).GetField("<RequestedTtlDays>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
sentinel: 0);
requestedTtlDays.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
requestedTtlDays.AddAnnotation("Relational:ColumnName", "requested_ttl_days");
var requestorId = runtimeEntityType.AddProperty(
"RequestorId",
typeof(string),
propertyInfo: typeof(ExceptionApprovalRequestEntity).GetProperty("RequestorId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalRequestEntity).GetField("<RequestorId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
requestorId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
requestorId.AddAnnotation("Relational:ColumnName", "requestor_id");
var requiredApproverIds = runtimeEntityType.AddProperty(
"RequiredApproverIds",
typeof(string[]),
propertyInfo: typeof(ExceptionApprovalRequestEntity).GetProperty("RequiredApproverIds", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalRequestEntity).GetField("<RequiredApproverIds>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
var requiredApproverIdsElementType = requiredApproverIds.SetElementType(typeof(string));
requiredApproverIds.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
requiredApproverIds.AddAnnotation("Relational:ColumnName", "required_approver_ids");
var resolvedAt = runtimeEntityType.AddProperty(
"ResolvedAt",
typeof(DateTimeOffset?),
propertyInfo: typeof(ExceptionApprovalRequestEntity).GetProperty("ResolvedAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalRequestEntity).GetField("<ResolvedAt>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
resolvedAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
resolvedAt.AddAnnotation("Relational:ColumnName", "resolved_at");
var status = runtimeEntityType.AddProperty(
"Status",
typeof(ApprovalRequestStatus),
propertyInfo: typeof(ExceptionApprovalRequestEntity).GetProperty("Status", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalRequestEntity).GetField("<Status>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
providerPropertyType: typeof(string));
status.SetSentinelFromProviderValue("Pending");
status.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
status.AddAnnotation("Relational:ColumnName", "status");
var tenantId = runtimeEntityType.AddProperty(
"TenantId",
typeof(string),
propertyInfo: typeof(ExceptionApprovalRequestEntity).GetProperty("TenantId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalRequestEntity).GetField("<TenantId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
tenantId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
tenantId.AddAnnotation("Relational:ColumnName", "tenant_id");
var ticketRef = runtimeEntityType.AddProperty(
"TicketRef",
typeof(string),
propertyInfo: typeof(ExceptionApprovalRequestEntity).GetProperty("TicketRef", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalRequestEntity).GetField("<TicketRef>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
ticketRef.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
ticketRef.AddAnnotation("Relational:ColumnName", "ticket_ref");
var updatedAt = runtimeEntityType.AddProperty(
"UpdatedAt",
typeof(DateTimeOffset),
propertyInfo: typeof(ExceptionApprovalRequestEntity).GetProperty("UpdatedAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalRequestEntity).GetField("<UpdatedAt>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
sentinel: new DateTimeOffset(new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 0, 0, 0, 0)));
updatedAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
updatedAt.AddAnnotation("Relational:ColumnName", "updated_at");
updatedAt.AddAnnotation("Relational:DefaultValueSql", "now()");
var version = runtimeEntityType.AddProperty(
"Version",
typeof(int),
propertyInfo: typeof(ExceptionApprovalRequestEntity).GetProperty("Version", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalRequestEntity).GetField("<Version>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
sentinel: 0);
version.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
version.AddAnnotation("Relational:ColumnName", "version");
var vulnerabilityId = runtimeEntityType.AddProperty(
"VulnerabilityId",
typeof(string),
propertyInfo: typeof(ExceptionApprovalRequestEntity).GetProperty("VulnerabilityId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalRequestEntity).GetField("<VulnerabilityId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
vulnerabilityId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
vulnerabilityId.AddAnnotation("Relational:ColumnName", "vulnerability_id");
var key = runtimeEntityType.AddKey(
new[] { id });
runtimeEntityType.SetPrimaryKey(key);
key.AddAnnotation("Relational:Name", "exception_approval_requests_pkey");
var index = runtimeEntityType.AddIndex(
new[] { requestId },
unique: true);
var idx_approval_requests_status = runtimeEntityType.AddIndex(
new[] { tenantId, status },
name: "idx_approval_requests_status");
var idx_approval_requests_tenant = runtimeEntityType.AddIndex(
new[] { tenantId },
name: "idx_approval_requests_tenant");
return runtimeEntityType;
}
public static void CreateAnnotations(RuntimeEntityType runtimeEntityType)
{
runtimeEntityType.AddAnnotation("Relational:FunctionName", null);
runtimeEntityType.AddAnnotation("Relational:Schema", "policy");
runtimeEntityType.AddAnnotation("Relational:SqlQuery", null);
runtimeEntityType.AddAnnotation("Relational:TableName", "exception_approval_requests");
runtimeEntityType.AddAnnotation("Relational:ViewName", null);
runtimeEntityType.AddAnnotation("Relational:ViewSchema", null);
Customize(runtimeEntityType);
}
static partial void Customize(RuntimeEntityType runtimeEntityType);
}
}

View File

@@ -0,0 +1,203 @@
// <auto-generated />
using System;
using System.Reflection;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
using StellaOps.Policy.Persistence.Postgres.Models;
#pragma warning disable 219, 612, 618
#nullable disable
namespace StellaOps.Policy.Persistence.EfCore.CompiledModels
{
[EntityFrameworkInternal]
public partial class ExceptionApprovalRuleEntityEntityType
{
public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null)
{
var runtimeEntityType = model.AddEntityType(
"StellaOps.Policy.Persistence.Postgres.Models.ExceptionApprovalRuleEntity",
typeof(ExceptionApprovalRuleEntity),
baseEntityType,
propertyCount: 16,
unnamedIndexCount: 1,
keyCount: 1);
var id = runtimeEntityType.AddProperty(
"Id",
typeof(Guid),
propertyInfo: typeof(ExceptionApprovalRuleEntity).GetProperty("Id", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalRuleEntity).GetField("<Id>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
afterSaveBehavior: PropertySaveBehavior.Throw,
sentinel: new Guid("00000000-0000-0000-0000-000000000000"));
id.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
id.AddAnnotation("Relational:ColumnName", "id");
id.AddAnnotation("Relational:DefaultValueSql", "gen_random_uuid()");
var allowSelfApproval = runtimeEntityType.AddProperty(
"AllowSelfApproval",
typeof(bool),
propertyInfo: typeof(ExceptionApprovalRuleEntity).GetProperty("AllowSelfApproval", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalRuleEntity).GetField("<AllowSelfApproval>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
sentinel: false);
allowSelfApproval.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
allowSelfApproval.AddAnnotation("Relational:ColumnName", "allow_self_approval");
var createdAt = runtimeEntityType.AddProperty(
"CreatedAt",
typeof(DateTimeOffset),
propertyInfo: typeof(ExceptionApprovalRuleEntity).GetProperty("CreatedAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalRuleEntity).GetField("<CreatedAt>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
sentinel: new DateTimeOffset(new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 0, 0, 0, 0)));
createdAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
createdAt.AddAnnotation("Relational:ColumnName", "created_at");
createdAt.AddAnnotation("Relational:DefaultValueSql", "now()");
var description = runtimeEntityType.AddProperty(
"Description",
typeof(string),
propertyInfo: typeof(ExceptionApprovalRuleEntity).GetProperty("Description", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalRuleEntity).GetField("<Description>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
description.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
description.AddAnnotation("Relational:ColumnName", "description");
var enabled = runtimeEntityType.AddProperty(
"Enabled",
typeof(bool),
propertyInfo: typeof(ExceptionApprovalRuleEntity).GetProperty("Enabled", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalRuleEntity).GetField("<Enabled>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
sentinel: false);
enabled.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
enabled.AddAnnotation("Relational:ColumnName", "enabled");
var gateLevel = runtimeEntityType.AddProperty(
"GateLevel",
typeof(GateLevel),
propertyInfo: typeof(ExceptionApprovalRuleEntity).GetProperty("GateLevel", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalRuleEntity).GetField("<GateLevel>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
providerPropertyType: typeof(int));
gateLevel.SetSentinelFromProviderValue(0);
gateLevel.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
gateLevel.AddAnnotation("Relational:ColumnName", "gate_level");
var maxTtlDays = runtimeEntityType.AddProperty(
"MaxTtlDays",
typeof(int),
propertyInfo: typeof(ExceptionApprovalRuleEntity).GetProperty("MaxTtlDays", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalRuleEntity).GetField("<MaxTtlDays>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
sentinel: 0);
maxTtlDays.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
maxTtlDays.AddAnnotation("Relational:ColumnName", "max_ttl_days");
var minApprovers = runtimeEntityType.AddProperty(
"MinApprovers",
typeof(int),
propertyInfo: typeof(ExceptionApprovalRuleEntity).GetProperty("MinApprovers", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalRuleEntity).GetField("<MinApprovers>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
sentinel: 0);
minApprovers.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
minApprovers.AddAnnotation("Relational:ColumnName", "min_approvers");
var minRationaleLength = runtimeEntityType.AddProperty(
"MinRationaleLength",
typeof(int),
propertyInfo: typeof(ExceptionApprovalRuleEntity).GetProperty("MinRationaleLength", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalRuleEntity).GetField("<MinRationaleLength>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
sentinel: 0);
minRationaleLength.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
minRationaleLength.AddAnnotation("Relational:ColumnName", "min_rationale_length");
var name = runtimeEntityType.AddProperty(
"Name",
typeof(string),
propertyInfo: typeof(ExceptionApprovalRuleEntity).GetProperty("Name", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalRuleEntity).GetField("<Name>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
name.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
name.AddAnnotation("Relational:ColumnName", "name");
var priority = runtimeEntityType.AddProperty(
"Priority",
typeof(int),
propertyInfo: typeof(ExceptionApprovalRuleEntity).GetProperty("Priority", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalRuleEntity).GetField("<Priority>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
sentinel: 0);
priority.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
priority.AddAnnotation("Relational:ColumnName", "priority");
var requireCompensatingControls = runtimeEntityType.AddProperty(
"RequireCompensatingControls",
typeof(bool),
propertyInfo: typeof(ExceptionApprovalRuleEntity).GetProperty("RequireCompensatingControls", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalRuleEntity).GetField("<RequireCompensatingControls>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
sentinel: false);
requireCompensatingControls.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
requireCompensatingControls.AddAnnotation("Relational:ColumnName", "require_compensating_controls");
var requireEvidence = runtimeEntityType.AddProperty(
"RequireEvidence",
typeof(bool),
propertyInfo: typeof(ExceptionApprovalRuleEntity).GetProperty("RequireEvidence", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalRuleEntity).GetField("<RequireEvidence>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
sentinel: false);
requireEvidence.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
requireEvidence.AddAnnotation("Relational:ColumnName", "require_evidence");
var requiredRoles = runtimeEntityType.AddProperty(
"RequiredRoles",
typeof(string[]),
propertyInfo: typeof(ExceptionApprovalRuleEntity).GetProperty("RequiredRoles", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalRuleEntity).GetField("<RequiredRoles>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
var requiredRolesElementType = requiredRoles.SetElementType(typeof(string));
requiredRoles.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
requiredRoles.AddAnnotation("Relational:ColumnName", "required_roles");
var tenantId = runtimeEntityType.AddProperty(
"TenantId",
typeof(string),
propertyInfo: typeof(ExceptionApprovalRuleEntity).GetProperty("TenantId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalRuleEntity).GetField("<TenantId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
tenantId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
tenantId.AddAnnotation("Relational:ColumnName", "tenant_id");
var updatedAt = runtimeEntityType.AddProperty(
"UpdatedAt",
typeof(DateTimeOffset),
propertyInfo: typeof(ExceptionApprovalRuleEntity).GetProperty("UpdatedAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionApprovalRuleEntity).GetField("<UpdatedAt>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
sentinel: new DateTimeOffset(new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 0, 0, 0, 0)));
updatedAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
updatedAt.AddAnnotation("Relational:ColumnName", "updated_at");
updatedAt.AddAnnotation("Relational:DefaultValueSql", "now()");
var key = runtimeEntityType.AddKey(
new[] { id });
runtimeEntityType.SetPrimaryKey(key);
key.AddAnnotation("Relational:Name", "exception_approval_rules_pkey");
var index = runtimeEntityType.AddIndex(
new[] { tenantId, gateLevel, name },
unique: true);
return runtimeEntityType;
}
public static void CreateAnnotations(RuntimeEntityType runtimeEntityType)
{
runtimeEntityType.AddAnnotation("Relational:FunctionName", null);
runtimeEntityType.AddAnnotation("Relational:Schema", "policy");
runtimeEntityType.AddAnnotation("Relational:SqlQuery", null);
runtimeEntityType.AddAnnotation("Relational:TableName", "exception_approval_rules");
runtimeEntityType.AddAnnotation("Relational:ViewName", null);
runtimeEntityType.AddAnnotation("Relational:ViewSchema", null);
Customize(runtimeEntityType);
}
static partial void Customize(RuntimeEntityType runtimeEntityType);
}
}

View File

@@ -0,0 +1,242 @@
// <auto-generated />
using System;
using System.Reflection;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
using StellaOps.Policy.Persistence.Postgres.Models;
#pragma warning disable 219, 612, 618
#nullable disable
namespace StellaOps.Policy.Persistence.EfCore.CompiledModels
{
[EntityFrameworkInternal]
public partial class ExceptionEntityEntityType
{
public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null)
{
var runtimeEntityType = model.AddEntityType(
"StellaOps.Policy.Persistence.Postgres.Models.ExceptionEntity",
typeof(ExceptionEntity),
baseEntityType,
propertyCount: 19,
unnamedIndexCount: 2,
namedIndexCount: 2,
keyCount: 1);
var id = runtimeEntityType.AddProperty(
"Id",
typeof(Guid),
propertyInfo: typeof(ExceptionEntity).GetProperty("Id", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionEntity).GetField("<Id>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
afterSaveBehavior: PropertySaveBehavior.Throw,
sentinel: new Guid("00000000-0000-0000-0000-000000000000"));
id.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
id.AddAnnotation("Relational:ColumnName", "id");
id.AddAnnotation("Relational:DefaultValueSql", "gen_random_uuid()");
var approvedAt = runtimeEntityType.AddProperty(
"ApprovedAt",
typeof(DateTimeOffset?),
propertyInfo: typeof(ExceptionEntity).GetProperty("ApprovedAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionEntity).GetField("<ApprovedAt>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
approvedAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
approvedAt.AddAnnotation("Relational:ColumnName", "approved_at");
var approvedBy = runtimeEntityType.AddProperty(
"ApprovedBy",
typeof(string),
propertyInfo: typeof(ExceptionEntity).GetProperty("ApprovedBy", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionEntity).GetField("<ApprovedBy>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
approvedBy.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
approvedBy.AddAnnotation("Relational:ColumnName", "approved_by");
var artifactPattern = runtimeEntityType.AddProperty(
"ArtifactPattern",
typeof(string),
propertyInfo: typeof(ExceptionEntity).GetProperty("ArtifactPattern", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionEntity).GetField("<ArtifactPattern>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
artifactPattern.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
artifactPattern.AddAnnotation("Relational:ColumnName", "artifact_pattern");
var createdAt = runtimeEntityType.AddProperty(
"CreatedAt",
typeof(DateTimeOffset),
propertyInfo: typeof(ExceptionEntity).GetProperty("CreatedAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionEntity).GetField("<CreatedAt>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
sentinel: new DateTimeOffset(new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 0, 0, 0, 0)));
createdAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
createdAt.AddAnnotation("Relational:ColumnName", "created_at");
createdAt.AddAnnotation("Relational:DefaultValueSql", "now()");
var createdBy = runtimeEntityType.AddProperty(
"CreatedBy",
typeof(string),
propertyInfo: typeof(ExceptionEntity).GetProperty("CreatedBy", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionEntity).GetField("<CreatedBy>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
createdBy.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
createdBy.AddAnnotation("Relational:ColumnName", "created_by");
var description = runtimeEntityType.AddProperty(
"Description",
typeof(string),
propertyInfo: typeof(ExceptionEntity).GetProperty("Description", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionEntity).GetField("<Description>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
description.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
description.AddAnnotation("Relational:ColumnName", "description");
var exceptionId = runtimeEntityType.AddProperty(
"ExceptionId",
typeof(string),
propertyInfo: typeof(ExceptionEntity).GetProperty("ExceptionId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionEntity).GetField("<ExceptionId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
exceptionId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
exceptionId.AddAnnotation("Relational:ColumnName", "exception_id");
var expiresAt = runtimeEntityType.AddProperty(
"ExpiresAt",
typeof(DateTimeOffset?),
propertyInfo: typeof(ExceptionEntity).GetProperty("ExpiresAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionEntity).GetField("<ExpiresAt>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
expiresAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
expiresAt.AddAnnotation("Relational:ColumnName", "expires_at");
var metadata = runtimeEntityType.AddProperty(
"Metadata",
typeof(string),
propertyInfo: typeof(ExceptionEntity).GetProperty("Metadata", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionEntity).GetField("<Metadata>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
metadata.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
metadata.AddAnnotation("Relational:ColumnName", "metadata");
metadata.AddAnnotation("Relational:ColumnType", "jsonb");
var name = runtimeEntityType.AddProperty(
"Name",
typeof(string),
propertyInfo: typeof(ExceptionEntity).GetProperty("Name", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionEntity).GetField("<Name>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
name.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
name.AddAnnotation("Relational:ColumnName", "name");
var projectId = runtimeEntityType.AddProperty(
"ProjectId",
typeof(string),
propertyInfo: typeof(ExceptionEntity).GetProperty("ProjectId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionEntity).GetField("<ProjectId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
projectId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
projectId.AddAnnotation("Relational:ColumnName", "project_id");
var reason = runtimeEntityType.AddProperty(
"Reason",
typeof(string),
propertyInfo: typeof(ExceptionEntity).GetProperty("Reason", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionEntity).GetField("<Reason>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
reason.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
reason.AddAnnotation("Relational:ColumnName", "reason");
var resourcePattern = runtimeEntityType.AddProperty(
"ResourcePattern",
typeof(string),
propertyInfo: typeof(ExceptionEntity).GetProperty("ResourcePattern", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionEntity).GetField("<ResourcePattern>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
resourcePattern.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
resourcePattern.AddAnnotation("Relational:ColumnName", "resource_pattern");
var revokedAt = runtimeEntityType.AddProperty(
"RevokedAt",
typeof(DateTimeOffset?),
propertyInfo: typeof(ExceptionEntity).GetProperty("RevokedAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionEntity).GetField("<RevokedAt>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
revokedAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
revokedAt.AddAnnotation("Relational:ColumnName", "revoked_at");
var revokedBy = runtimeEntityType.AddProperty(
"RevokedBy",
typeof(string),
propertyInfo: typeof(ExceptionEntity).GetProperty("RevokedBy", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionEntity).GetField("<RevokedBy>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
revokedBy.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
revokedBy.AddAnnotation("Relational:ColumnName", "revoked_by");
var rulePattern = runtimeEntityType.AddProperty(
"RulePattern",
typeof(string),
propertyInfo: typeof(ExceptionEntity).GetProperty("RulePattern", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionEntity).GetField("<RulePattern>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
rulePattern.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
rulePattern.AddAnnotation("Relational:ColumnName", "rule_pattern");
var status = runtimeEntityType.AddProperty(
"Status",
typeof(ExceptionStatus),
propertyInfo: typeof(ExceptionEntity).GetProperty("Status", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionEntity).GetField("<Status>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
status.SetValueConverter(new ValueConverter<ExceptionStatus, string>(
string (ExceptionStatus v) => ((object)v).ToString().ToLowerInvariant(),
ExceptionStatus (string v) => Enum.Parse<ExceptionStatus>(v, true)));
status.SetSentinelFromProviderValue("active");
status.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
status.AddAnnotation("Relational:ColumnName", "status");
var tenantId = runtimeEntityType.AddProperty(
"TenantId",
typeof(string),
propertyInfo: typeof(ExceptionEntity).GetProperty("TenantId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExceptionEntity).GetField("<TenantId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
tenantId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
tenantId.AddAnnotation("Relational:ColumnName", "tenant_id");
var key = runtimeEntityType.AddKey(
new[] { id });
runtimeEntityType.SetPrimaryKey(key);
key.AddAnnotation("Relational:Name", "exceptions_pkey");
var index = runtimeEntityType.AddIndex(
new[] { exceptionId },
unique: true);
var index0 = runtimeEntityType.AddIndex(
new[] { tenantId, name },
unique: true);
var idx_exceptions_status = runtimeEntityType.AddIndex(
new[] { tenantId, status },
name: "idx_exceptions_status");
var idx_exceptions_tenant = runtimeEntityType.AddIndex(
new[] { tenantId },
name: "idx_exceptions_tenant");
return runtimeEntityType;
}
public static void CreateAnnotations(RuntimeEntityType runtimeEntityType)
{
runtimeEntityType.AddAnnotation("Relational:FunctionName", null);
runtimeEntityType.AddAnnotation("Relational:Schema", "policy");
runtimeEntityType.AddAnnotation("Relational:SqlQuery", null);
runtimeEntityType.AddAnnotation("Relational:TableName", "exceptions");
runtimeEntityType.AddAnnotation("Relational:ViewName", null);
runtimeEntityType.AddAnnotation("Relational:ViewSchema", null);
Customize(runtimeEntityType);
}
static partial void Customize(RuntimeEntityType runtimeEntityType);
}
}

View File

@@ -0,0 +1,172 @@
// <auto-generated />
using System;
using System.Reflection;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
using StellaOps.Policy.Persistence.Postgres.Models;
#pragma warning disable 219, 612, 618
#nullable disable
namespace StellaOps.Policy.Persistence.EfCore.CompiledModels
{
[EntityFrameworkInternal]
public partial class ExplanationEntityEntityType
{
public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null)
{
var runtimeEntityType = model.AddEntityType(
"StellaOps.Policy.Persistence.Postgres.Models.ExplanationEntity",
typeof(ExplanationEntity),
baseEntityType,
propertyCount: 12,
namedIndexCount: 2,
keyCount: 1);
var id = runtimeEntityType.AddProperty(
"Id",
typeof(Guid),
propertyInfo: typeof(ExplanationEntity).GetProperty("Id", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExplanationEntity).GetField("<Id>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
afterSaveBehavior: PropertySaveBehavior.Throw,
sentinel: new Guid("00000000-0000-0000-0000-000000000000"));
id.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
id.AddAnnotation("Relational:ColumnName", "id");
id.AddAnnotation("Relational:DefaultValueSql", "gen_random_uuid()");
var createdAt = runtimeEntityType.AddProperty(
"CreatedAt",
typeof(DateTimeOffset),
propertyInfo: typeof(ExplanationEntity).GetProperty("CreatedAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExplanationEntity).GetField("<CreatedAt>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
sentinel: new DateTimeOffset(new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 0, 0, 0, 0)));
createdAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
createdAt.AddAnnotation("Relational:ColumnName", "created_at");
createdAt.AddAnnotation("Relational:DefaultValueSql", "now()");
var details = runtimeEntityType.AddProperty(
"Details",
typeof(string),
propertyInfo: typeof(ExplanationEntity).GetProperty("Details", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExplanationEntity).GetField("<Details>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
details.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
details.AddAnnotation("Relational:ColumnName", "details");
details.AddAnnotation("Relational:ColumnType", "jsonb");
var evaluationRunId = runtimeEntityType.AddProperty(
"EvaluationRunId",
typeof(Guid),
propertyInfo: typeof(ExplanationEntity).GetProperty("EvaluationRunId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExplanationEntity).GetField("<EvaluationRunId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
sentinel: new Guid("00000000-0000-0000-0000-000000000000"));
evaluationRunId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
evaluationRunId.AddAnnotation("Relational:ColumnName", "evaluation_run_id");
var lineNumber = runtimeEntityType.AddProperty(
"LineNumber",
typeof(int?),
propertyInfo: typeof(ExplanationEntity).GetProperty("LineNumber", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExplanationEntity).GetField("<LineNumber>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
lineNumber.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
lineNumber.AddAnnotation("Relational:ColumnName", "line_number");
var message = runtimeEntityType.AddProperty(
"Message",
typeof(string),
propertyInfo: typeof(ExplanationEntity).GetProperty("Message", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExplanationEntity).GetField("<Message>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
message.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
message.AddAnnotation("Relational:ColumnName", "message");
var remediation = runtimeEntityType.AddProperty(
"Remediation",
typeof(string),
propertyInfo: typeof(ExplanationEntity).GetProperty("Remediation", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExplanationEntity).GetField("<Remediation>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
remediation.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
remediation.AddAnnotation("Relational:ColumnName", "remediation");
var resourcePath = runtimeEntityType.AddProperty(
"ResourcePath",
typeof(string),
propertyInfo: typeof(ExplanationEntity).GetProperty("ResourcePath", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExplanationEntity).GetField("<ResourcePath>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
resourcePath.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
resourcePath.AddAnnotation("Relational:ColumnName", "resource_path");
var result = runtimeEntityType.AddProperty(
"Result",
typeof(RuleResult),
propertyInfo: typeof(ExplanationEntity).GetProperty("Result", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExplanationEntity).GetField("<Result>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
result.SetValueConverter(new ValueConverter<RuleResult, string>(
string (RuleResult v) => ((object)v).ToString().ToLowerInvariant(),
RuleResult (string v) => Enum.Parse<RuleResult>(v, true)));
result.SetSentinelFromProviderValue("pass");
result.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
result.AddAnnotation("Relational:ColumnName", "result");
var ruleId = runtimeEntityType.AddProperty(
"RuleId",
typeof(Guid?),
propertyInfo: typeof(ExplanationEntity).GetProperty("RuleId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExplanationEntity).GetField("<RuleId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
ruleId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
ruleId.AddAnnotation("Relational:ColumnName", "rule_id");
var ruleName = runtimeEntityType.AddProperty(
"RuleName",
typeof(string),
propertyInfo: typeof(ExplanationEntity).GetProperty("RuleName", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExplanationEntity).GetField("<RuleName>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
ruleName.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
ruleName.AddAnnotation("Relational:ColumnName", "rule_name");
var severity = runtimeEntityType.AddProperty(
"Severity",
typeof(string),
propertyInfo: typeof(ExplanationEntity).GetProperty("Severity", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ExplanationEntity).GetField("<Severity>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
severity.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
severity.AddAnnotation("Relational:ColumnName", "severity");
var key = runtimeEntityType.AddKey(
new[] { id });
runtimeEntityType.SetPrimaryKey(key);
key.AddAnnotation("Relational:Name", "explanations_pkey");
var idx_explanations_result = runtimeEntityType.AddIndex(
new[] { evaluationRunId, result },
name: "idx_explanations_result");
var idx_explanations_run = runtimeEntityType.AddIndex(
new[] { evaluationRunId },
name: "idx_explanations_run");
return runtimeEntityType;
}
public static void CreateAnnotations(RuntimeEntityType runtimeEntityType)
{
runtimeEntityType.AddAnnotation("Relational:FunctionName", null);
runtimeEntityType.AddAnnotation("Relational:Schema", "policy");
runtimeEntityType.AddAnnotation("Relational:SqlQuery", null);
runtimeEntityType.AddAnnotation("Relational:TableName", "explanations");
runtimeEntityType.AddAnnotation("Relational:ViewName", null);
runtimeEntityType.AddAnnotation("Relational:ViewSchema", null);
Customize(runtimeEntityType);
}
static partial void Customize(RuntimeEntityType runtimeEntityType);
}
}

View File

@@ -0,0 +1,278 @@
// <auto-generated />
using System;
using System.Reflection;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
using StellaOps.Policy.Persistence.Postgres.Models;
#pragma warning disable 219, 612, 618
#nullable disable
namespace StellaOps.Policy.Persistence.EfCore.CompiledModels
{
[EntityFrameworkInternal]
public partial class GateBypassAuditEntityEntityType
{
public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null)
{
var runtimeEntityType = model.AddEntityType(
"StellaOps.Policy.Persistence.Postgres.Models.GateBypassAuditEntity",
typeof(GateBypassAuditEntity),
baseEntityType,
propertyCount: 25,
namedIndexCount: 1,
keyCount: 1);
var id = runtimeEntityType.AddProperty(
"Id",
typeof(Guid),
propertyInfo: typeof(GateBypassAuditEntity).GetProperty("Id", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(GateBypassAuditEntity).GetField("<Id>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
afterSaveBehavior: PropertySaveBehavior.Throw,
sentinel: new Guid("00000000-0000-0000-0000-000000000000"));
id.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
id.AddAnnotation("Relational:ColumnName", "id");
id.AddAnnotation("Relational:DefaultValueSql", "gen_random_uuid()");
var actor = runtimeEntityType.AddProperty(
"Actor",
typeof(string),
propertyInfo: typeof(GateBypassAuditEntity).GetProperty("Actor", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(GateBypassAuditEntity).GetField("<Actor>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
actor.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
actor.AddAnnotation("Relational:ColumnName", "actor");
var actorEmail = runtimeEntityType.AddProperty(
"ActorEmail",
typeof(string),
propertyInfo: typeof(GateBypassAuditEntity).GetProperty("ActorEmail", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(GateBypassAuditEntity).GetField("<ActorEmail>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
actorEmail.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
actorEmail.AddAnnotation("Relational:ColumnName", "actor_email");
var actorIpAddress = runtimeEntityType.AddProperty(
"ActorIpAddress",
typeof(string),
propertyInfo: typeof(GateBypassAuditEntity).GetProperty("ActorIpAddress", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(GateBypassAuditEntity).GetField("<ActorIpAddress>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
actorIpAddress.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
actorIpAddress.AddAnnotation("Relational:ColumnName", "actor_ip_address");
var actorSubject = runtimeEntityType.AddProperty(
"ActorSubject",
typeof(string),
propertyInfo: typeof(GateBypassAuditEntity).GetProperty("ActorSubject", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(GateBypassAuditEntity).GetField("<ActorSubject>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
actorSubject.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
actorSubject.AddAnnotation("Relational:ColumnName", "actor_subject");
var attestationDigest = runtimeEntityType.AddProperty(
"AttestationDigest",
typeof(string),
propertyInfo: typeof(GateBypassAuditEntity).GetProperty("AttestationDigest", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(GateBypassAuditEntity).GetField("<AttestationDigest>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
attestationDigest.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
attestationDigest.AddAnnotation("Relational:ColumnName", "attestation_digest");
var baselineRef = runtimeEntityType.AddProperty(
"BaselineRef",
typeof(string),
propertyInfo: typeof(GateBypassAuditEntity).GetProperty("BaselineRef", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(GateBypassAuditEntity).GetField("<BaselineRef>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
baselineRef.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
baselineRef.AddAnnotation("Relational:ColumnName", "baseline_ref");
var bypassType = runtimeEntityType.AddProperty(
"BypassType",
typeof(string),
propertyInfo: typeof(GateBypassAuditEntity).GetProperty("BypassType", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(GateBypassAuditEntity).GetField("<BypassType>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
bypassType.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
bypassType.AddAnnotation("Relational:ColumnName", "bypass_type");
var bypassedGates = runtimeEntityType.AddProperty(
"BypassedGates",
typeof(string),
propertyInfo: typeof(GateBypassAuditEntity).GetProperty("BypassedGates", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(GateBypassAuditEntity).GetField("<BypassedGates>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
bypassedGates.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
bypassedGates.AddAnnotation("Relational:ColumnName", "bypassed_gates");
bypassedGates.AddAnnotation("Relational:ColumnType", "jsonb");
var ciContext = runtimeEntityType.AddProperty(
"CiContext",
typeof(string),
propertyInfo: typeof(GateBypassAuditEntity).GetProperty("CiContext", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(GateBypassAuditEntity).GetField("<CiContext>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
ciContext.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
ciContext.AddAnnotation("Relational:ColumnName", "ci_context");
var createdAt = runtimeEntityType.AddProperty(
"CreatedAt",
typeof(DateTimeOffset),
propertyInfo: typeof(GateBypassAuditEntity).GetProperty("CreatedAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(GateBypassAuditEntity).GetField("<CreatedAt>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
sentinel: new DateTimeOffset(new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 0, 0, 0, 0)));
createdAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
createdAt.AddAnnotation("Relational:ColumnName", "created_at");
createdAt.AddAnnotation("Relational:DefaultValueSql", "now()");
var decisionId = runtimeEntityType.AddProperty(
"DecisionId",
typeof(string),
propertyInfo: typeof(GateBypassAuditEntity).GetProperty("DecisionId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(GateBypassAuditEntity).GetField("<DecisionId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
decisionId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
decisionId.AddAnnotation("Relational:ColumnName", "decision_id");
var expiresAt = runtimeEntityType.AddProperty(
"ExpiresAt",
typeof(DateTimeOffset?),
propertyInfo: typeof(GateBypassAuditEntity).GetProperty("ExpiresAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(GateBypassAuditEntity).GetField("<ExpiresAt>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
expiresAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
expiresAt.AddAnnotation("Relational:ColumnName", "expires_at");
var finalDecision = runtimeEntityType.AddProperty(
"FinalDecision",
typeof(string),
propertyInfo: typeof(GateBypassAuditEntity).GetProperty("FinalDecision", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(GateBypassAuditEntity).GetField("<FinalDecision>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
finalDecision.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
finalDecision.AddAnnotation("Relational:ColumnName", "final_decision");
var imageDigest = runtimeEntityType.AddProperty(
"ImageDigest",
typeof(string),
propertyInfo: typeof(GateBypassAuditEntity).GetProperty("ImageDigest", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(GateBypassAuditEntity).GetField("<ImageDigest>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
imageDigest.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
imageDigest.AddAnnotation("Relational:ColumnName", "image_digest");
var justification = runtimeEntityType.AddProperty(
"Justification",
typeof(string),
propertyInfo: typeof(GateBypassAuditEntity).GetProperty("Justification", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(GateBypassAuditEntity).GetField("<Justification>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
justification.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
justification.AddAnnotation("Relational:ColumnName", "justification");
var metadata = runtimeEntityType.AddProperty(
"Metadata",
typeof(string),
propertyInfo: typeof(GateBypassAuditEntity).GetProperty("Metadata", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(GateBypassAuditEntity).GetField("<Metadata>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
metadata.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
metadata.AddAnnotation("Relational:ColumnName", "metadata");
metadata.AddAnnotation("Relational:ColumnType", "jsonb");
var originalDecision = runtimeEntityType.AddProperty(
"OriginalDecision",
typeof(string),
propertyInfo: typeof(GateBypassAuditEntity).GetProperty("OriginalDecision", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(GateBypassAuditEntity).GetField("<OriginalDecision>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
originalDecision.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
originalDecision.AddAnnotation("Relational:ColumnName", "original_decision");
var policyId = runtimeEntityType.AddProperty(
"PolicyId",
typeof(string),
propertyInfo: typeof(GateBypassAuditEntity).GetProperty("PolicyId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(GateBypassAuditEntity).GetField("<PolicyId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
policyId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
policyId.AddAnnotation("Relational:ColumnName", "policy_id");
var rekorUuid = runtimeEntityType.AddProperty(
"RekorUuid",
typeof(string),
propertyInfo: typeof(GateBypassAuditEntity).GetProperty("RekorUuid", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(GateBypassAuditEntity).GetField("<RekorUuid>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
rekorUuid.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
rekorUuid.AddAnnotation("Relational:ColumnName", "rekor_uuid");
var repository = runtimeEntityType.AddProperty(
"Repository",
typeof(string),
propertyInfo: typeof(GateBypassAuditEntity).GetProperty("Repository", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(GateBypassAuditEntity).GetField("<Repository>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
repository.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
repository.AddAnnotation("Relational:ColumnName", "repository");
var source = runtimeEntityType.AddProperty(
"Source",
typeof(string),
propertyInfo: typeof(GateBypassAuditEntity).GetProperty("Source", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(GateBypassAuditEntity).GetField("<Source>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
source.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
source.AddAnnotation("Relational:ColumnName", "source");
var tag = runtimeEntityType.AddProperty(
"Tag",
typeof(string),
propertyInfo: typeof(GateBypassAuditEntity).GetProperty("Tag", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(GateBypassAuditEntity).GetField("<Tag>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
tag.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
tag.AddAnnotation("Relational:ColumnName", "tag");
var tenantId = runtimeEntityType.AddProperty(
"TenantId",
typeof(string),
propertyInfo: typeof(GateBypassAuditEntity).GetProperty("TenantId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(GateBypassAuditEntity).GetField("<TenantId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
tenantId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
tenantId.AddAnnotation("Relational:ColumnName", "tenant_id");
var timestamp = runtimeEntityType.AddProperty(
"Timestamp",
typeof(DateTimeOffset),
propertyInfo: typeof(GateBypassAuditEntity).GetProperty("Timestamp", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(GateBypassAuditEntity).GetField("<Timestamp>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
sentinel: new DateTimeOffset(new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 0, 0, 0, 0)));
timestamp.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
timestamp.AddAnnotation("Relational:ColumnName", "timestamp");
timestamp.AddAnnotation("Relational:DefaultValueSql", "now()");
var key = runtimeEntityType.AddKey(
new[] { id });
runtimeEntityType.SetPrimaryKey(key);
key.AddAnnotation("Relational:Name", "gate_bypass_audit_pkey");
var idx_gate_bypass_audit_tenant_timestamp = runtimeEntityType.AddIndex(
new[] { tenantId, timestamp },
name: "idx_gate_bypass_audit_tenant_timestamp");
return runtimeEntityType;
}
public static void CreateAnnotations(RuntimeEntityType runtimeEntityType)
{
runtimeEntityType.AddAnnotation("Relational:FunctionName", null);
runtimeEntityType.AddAnnotation("Relational:Schema", "policy");
runtimeEntityType.AddAnnotation("Relational:SqlQuery", null);
runtimeEntityType.AddAnnotation("Relational:TableName", "gate_bypass_audit");
runtimeEntityType.AddAnnotation("Relational:ViewName", null);
runtimeEntityType.AddAnnotation("Relational:ViewSchema", null);
Customize(runtimeEntityType);
}
static partial void Customize(RuntimeEntityType runtimeEntityType);
}
}

View File

@@ -0,0 +1,198 @@
// <auto-generated />
using System;
using System.Reflection;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
using StellaOps.Policy.Persistence.Postgres.Models;
#pragma warning disable 219, 612, 618
#nullable disable
namespace StellaOps.Policy.Persistence.EfCore.CompiledModels
{
[EntityFrameworkInternal]
public partial class GateDecisionEntityEntityType
{
public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null)
{
var runtimeEntityType = model.AddEntityType(
"StellaOps.Policy.Persistence.Postgres.Models.GateDecisionEntity",
typeof(GateDecisionEntity),
baseEntityType,
propertyCount: 15,
namedIndexCount: 2,
keyCount: 1);
var decisionId = runtimeEntityType.AddProperty(
"DecisionId",
typeof(Guid),
propertyInfo: typeof(GateDecisionEntity).GetProperty("DecisionId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(GateDecisionEntity).GetField("<DecisionId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
afterSaveBehavior: PropertySaveBehavior.Throw,
sentinel: new Guid("00000000-0000-0000-0000-000000000000"));
decisionId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
decisionId.AddAnnotation("Relational:ColumnName", "decision_id");
decisionId.AddAnnotation("Relational:DefaultValueSql", "gen_random_uuid()");
var actor = runtimeEntityType.AddProperty(
"Actor",
typeof(string),
propertyInfo: typeof(GateDecisionEntity).GetProperty("Actor", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(GateDecisionEntity).GetField("<Actor>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
actor.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
actor.AddAnnotation("Relational:ColumnName", "actor");
var blockingUnknownIds = runtimeEntityType.AddProperty(
"BlockingUnknownIds",
typeof(string),
propertyInfo: typeof(GateDecisionEntity).GetProperty("BlockingUnknownIds", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(GateDecisionEntity).GetField("<BlockingUnknownIds>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
blockingUnknownIds.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
blockingUnknownIds.AddAnnotation("Relational:ColumnName", "blocking_unknown_ids");
blockingUnknownIds.AddAnnotation("Relational:ColumnType", "jsonb");
var bomRef = runtimeEntityType.AddProperty(
"BomRef",
typeof(string),
propertyInfo: typeof(GateDecisionEntity).GetProperty("BomRef", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(GateDecisionEntity).GetField("<BomRef>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
bomRef.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
bomRef.AddAnnotation("Relational:ColumnName", "bom_ref");
var ciContext = runtimeEntityType.AddProperty(
"CiContext",
typeof(string),
propertyInfo: typeof(GateDecisionEntity).GetProperty("CiContext", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(GateDecisionEntity).GetField("<CiContext>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
ciContext.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
ciContext.AddAnnotation("Relational:ColumnName", "ci_context");
var createdAt = runtimeEntityType.AddProperty(
"CreatedAt",
typeof(DateTimeOffset),
propertyInfo: typeof(GateDecisionEntity).GetProperty("CreatedAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(GateDecisionEntity).GetField("<CreatedAt>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
sentinel: new DateTimeOffset(new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 0, 0, 0, 0)));
createdAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
createdAt.AddAnnotation("Relational:ColumnName", "created_at");
createdAt.AddAnnotation("Relational:DefaultValueSql", "now()");
var evaluatedAt = runtimeEntityType.AddProperty(
"EvaluatedAt",
typeof(DateTimeOffset),
propertyInfo: typeof(GateDecisionEntity).GetProperty("EvaluatedAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(GateDecisionEntity).GetField("<EvaluatedAt>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
sentinel: new DateTimeOffset(new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 0, 0, 0, 0)));
evaluatedAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
evaluatedAt.AddAnnotation("Relational:ColumnName", "evaluated_at");
evaluatedAt.AddAnnotation("Relational:DefaultValueSql", "now()");
var gateId = runtimeEntityType.AddProperty(
"GateId",
typeof(string),
propertyInfo: typeof(GateDecisionEntity).GetProperty("GateId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(GateDecisionEntity).GetField("<GateId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
gateId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
gateId.AddAnnotation("Relational:ColumnName", "gate_id");
var gateStatus = runtimeEntityType.AddProperty(
"GateStatus",
typeof(string),
propertyInfo: typeof(GateDecisionEntity).GetProperty("GateStatus", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(GateDecisionEntity).GetField("<GateStatus>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
gateStatus.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
gateStatus.AddAnnotation("Relational:ColumnName", "gate_status");
var imageDigest = runtimeEntityType.AddProperty(
"ImageDigest",
typeof(string),
propertyInfo: typeof(GateDecisionEntity).GetProperty("ImageDigest", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(GateDecisionEntity).GetField("<ImageDigest>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
imageDigest.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
imageDigest.AddAnnotation("Relational:ColumnName", "image_digest");
var policyBundleHash = runtimeEntityType.AddProperty(
"PolicyBundleHash",
typeof(string),
propertyInfo: typeof(GateDecisionEntity).GetProperty("PolicyBundleHash", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(GateDecisionEntity).GetField("<PolicyBundleHash>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
policyBundleHash.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
policyBundleHash.AddAnnotation("Relational:ColumnName", "policy_bundle_hash");
var policyBundleId = runtimeEntityType.AddProperty(
"PolicyBundleId",
typeof(string),
propertyInfo: typeof(GateDecisionEntity).GetProperty("PolicyBundleId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(GateDecisionEntity).GetField("<PolicyBundleId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
policyBundleId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
policyBundleId.AddAnnotation("Relational:ColumnName", "policy_bundle_id");
var tenantId = runtimeEntityType.AddProperty(
"TenantId",
typeof(Guid),
propertyInfo: typeof(GateDecisionEntity).GetProperty("TenantId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(GateDecisionEntity).GetField("<TenantId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
sentinel: new Guid("00000000-0000-0000-0000-000000000000"));
tenantId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
tenantId.AddAnnotation("Relational:ColumnName", "tenant_id");
var verdictHash = runtimeEntityType.AddProperty(
"VerdictHash",
typeof(string),
propertyInfo: typeof(GateDecisionEntity).GetProperty("VerdictHash", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(GateDecisionEntity).GetField("<VerdictHash>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
verdictHash.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
verdictHash.AddAnnotation("Relational:ColumnName", "verdict_hash");
var warnings = runtimeEntityType.AddProperty(
"Warnings",
typeof(string),
propertyInfo: typeof(GateDecisionEntity).GetProperty("Warnings", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(GateDecisionEntity).GetField("<Warnings>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
warnings.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
warnings.AddAnnotation("Relational:ColumnName", "warnings");
warnings.AddAnnotation("Relational:ColumnType", "jsonb");
var key = runtimeEntityType.AddKey(
new[] { decisionId });
runtimeEntityType.SetPrimaryKey(key);
key.AddAnnotation("Relational:Name", "gate_decisions_pkey");
var idx_gate_decisions_gate_evaluated = runtimeEntityType.AddIndex(
new[] { tenantId, gateId, evaluatedAt },
name: "idx_gate_decisions_gate_evaluated");
var idx_gate_decisions_tenant_evaluated = runtimeEntityType.AddIndex(
new[] { tenantId, evaluatedAt },
name: "idx_gate_decisions_tenant_evaluated");
return runtimeEntityType;
}
public static void CreateAnnotations(RuntimeEntityType runtimeEntityType)
{
runtimeEntityType.AddAnnotation("Relational:FunctionName", null);
runtimeEntityType.AddAnnotation("Relational:Schema", "policy");
runtimeEntityType.AddAnnotation("Relational:SqlQuery", null);
runtimeEntityType.AddAnnotation("Relational:TableName", "gate_decisions");
runtimeEntityType.AddAnnotation("Relational:ViewName", null);
runtimeEntityType.AddAnnotation("Relational:ViewSchema", null);
Customize(runtimeEntityType);
}
static partial void Customize(RuntimeEntityType runtimeEntityType);
}
}

View File

@@ -0,0 +1,197 @@
// <auto-generated />
using System;
using System.Reflection;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
using StellaOps.Policy.Persistence.Postgres.Models;
#pragma warning disable 219, 612, 618
#nullable disable
namespace StellaOps.Policy.Persistence.EfCore.CompiledModels
{
[EntityFrameworkInternal]
public partial class LedgerExportEntityEntityType
{
public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null)
{
var runtimeEntityType = model.AddEntityType(
"StellaOps.Policy.Persistence.Postgres.Models.LedgerExportEntity",
typeof(LedgerExportEntity),
baseEntityType,
propertyCount: 15,
namedIndexCount: 3,
keyCount: 1);
var id = runtimeEntityType.AddProperty(
"Id",
typeof(Guid),
propertyInfo: typeof(LedgerExportEntity).GetProperty("Id", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(LedgerExportEntity).GetField("<Id>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
afterSaveBehavior: PropertySaveBehavior.Throw,
sentinel: new Guid("00000000-0000-0000-0000-000000000000"));
id.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
id.AddAnnotation("Relational:ColumnName", "id");
id.AddAnnotation("Relational:DefaultValueSql", "gen_random_uuid()");
var byteSize = runtimeEntityType.AddProperty(
"ByteSize",
typeof(long?),
propertyInfo: typeof(LedgerExportEntity).GetProperty("ByteSize", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(LedgerExportEntity).GetField("<ByteSize>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
byteSize.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
byteSize.AddAnnotation("Relational:ColumnName", "byte_size");
var contentDigest = runtimeEntityType.AddProperty(
"ContentDigest",
typeof(string),
propertyInfo: typeof(LedgerExportEntity).GetProperty("ContentDigest", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(LedgerExportEntity).GetField("<ContentDigest>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
contentDigest.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
contentDigest.AddAnnotation("Relational:ColumnName", "content_digest");
var createdAt = runtimeEntityType.AddProperty(
"CreatedAt",
typeof(DateTimeOffset),
propertyInfo: typeof(LedgerExportEntity).GetProperty("CreatedAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(LedgerExportEntity).GetField("<CreatedAt>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
sentinel: new DateTimeOffset(new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 0, 0, 0, 0)));
createdAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
createdAt.AddAnnotation("Relational:ColumnName", "created_at");
createdAt.AddAnnotation("Relational:DefaultValueSql", "now()");
var createdBy = runtimeEntityType.AddProperty(
"CreatedBy",
typeof(string),
propertyInfo: typeof(LedgerExportEntity).GetProperty("CreatedBy", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(LedgerExportEntity).GetField("<CreatedBy>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
createdBy.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
createdBy.AddAnnotation("Relational:ColumnName", "created_by");
var endTime = runtimeEntityType.AddProperty(
"EndTime",
typeof(DateTimeOffset?),
propertyInfo: typeof(LedgerExportEntity).GetProperty("EndTime", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(LedgerExportEntity).GetField("<EndTime>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
endTime.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
endTime.AddAnnotation("Relational:ColumnName", "end_time");
var errorMessage = runtimeEntityType.AddProperty(
"ErrorMessage",
typeof(string),
propertyInfo: typeof(LedgerExportEntity).GetProperty("ErrorMessage", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(LedgerExportEntity).GetField("<ErrorMessage>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
errorMessage.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
errorMessage.AddAnnotation("Relational:ColumnName", "error_message");
var exportType = runtimeEntityType.AddProperty(
"ExportType",
typeof(string),
propertyInfo: typeof(LedgerExportEntity).GetProperty("ExportType", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(LedgerExportEntity).GetField("<ExportType>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
exportType.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
exportType.AddAnnotation("Relational:ColumnName", "export_type");
var format = runtimeEntityType.AddProperty(
"Format",
typeof(string),
propertyInfo: typeof(LedgerExportEntity).GetProperty("Format", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(LedgerExportEntity).GetField("<Format>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
format.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
format.AddAnnotation("Relational:ColumnName", "format");
var metadata = runtimeEntityType.AddProperty(
"Metadata",
typeof(string),
propertyInfo: typeof(LedgerExportEntity).GetProperty("Metadata", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(LedgerExportEntity).GetField("<Metadata>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
metadata.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
metadata.AddAnnotation("Relational:ColumnName", "metadata");
metadata.AddAnnotation("Relational:ColumnType", "jsonb");
var recordCount = runtimeEntityType.AddProperty(
"RecordCount",
typeof(int?),
propertyInfo: typeof(LedgerExportEntity).GetProperty("RecordCount", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(LedgerExportEntity).GetField("<RecordCount>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
recordCount.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
recordCount.AddAnnotation("Relational:ColumnName", "record_count");
var startTime = runtimeEntityType.AddProperty(
"StartTime",
typeof(DateTimeOffset?),
propertyInfo: typeof(LedgerExportEntity).GetProperty("StartTime", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(LedgerExportEntity).GetField("<StartTime>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
startTime.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
startTime.AddAnnotation("Relational:ColumnName", "start_time");
var status = runtimeEntityType.AddProperty(
"Status",
typeof(string),
propertyInfo: typeof(LedgerExportEntity).GetProperty("Status", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(LedgerExportEntity).GetField("<Status>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
status.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
status.AddAnnotation("Relational:ColumnName", "status");
var storagePath = runtimeEntityType.AddProperty(
"StoragePath",
typeof(string),
propertyInfo: typeof(LedgerExportEntity).GetProperty("StoragePath", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(LedgerExportEntity).GetField("<StoragePath>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
storagePath.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
storagePath.AddAnnotation("Relational:ColumnName", "storage_path");
var tenantId = runtimeEntityType.AddProperty(
"TenantId",
typeof(string),
propertyInfo: typeof(LedgerExportEntity).GetProperty("TenantId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(LedgerExportEntity).GetField("<TenantId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
tenantId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
tenantId.AddAnnotation("Relational:ColumnName", "tenant_id");
var key = runtimeEntityType.AddKey(
new[] { id });
runtimeEntityType.SetPrimaryKey(key);
key.AddAnnotation("Relational:Name", "ledger_exports_pkey");
var idx_ledger_exports_created = runtimeEntityType.AddIndex(
new[] { tenantId, createdAt },
name: "idx_ledger_exports_created");
var idx_ledger_exports_status = runtimeEntityType.AddIndex(
new[] { status },
name: "idx_ledger_exports_status");
var idx_ledger_exports_tenant = runtimeEntityType.AddIndex(
new[] { tenantId },
name: "idx_ledger_exports_tenant");
return runtimeEntityType;
}
public static void CreateAnnotations(RuntimeEntityType runtimeEntityType)
{
runtimeEntityType.AddAnnotation("Relational:FunctionName", null);
runtimeEntityType.AddAnnotation("Relational:Schema", "policy");
runtimeEntityType.AddAnnotation("Relational:SqlQuery", null);
runtimeEntityType.AddAnnotation("Relational:TableName", "ledger_exports");
runtimeEntityType.AddAnnotation("Relational:ViewName", null);
runtimeEntityType.AddAnnotation("Relational:ViewSchema", null);
Customize(runtimeEntityType);
}
static partial void Customize(RuntimeEntityType runtimeEntityType);
}
}

View File

@@ -0,0 +1,175 @@
// <auto-generated />
using System;
using System.Reflection;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
using StellaOps.Policy.Persistence.Postgres.Models;
#pragma warning disable 219, 612, 618
#nullable disable
namespace StellaOps.Policy.Persistence.EfCore.CompiledModels
{
[EntityFrameworkInternal]
public partial class PackEntityEntityType
{
public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null)
{
var runtimeEntityType = model.AddEntityType(
"StellaOps.Policy.Persistence.Postgres.Models.PackEntity",
typeof(PackEntity),
baseEntityType,
propertyCount: 12,
unnamedIndexCount: 1,
namedIndexCount: 2,
keyCount: 1);
var id = runtimeEntityType.AddProperty(
"Id",
typeof(Guid),
propertyInfo: typeof(PackEntity).GetProperty("Id", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(PackEntity).GetField("<Id>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
afterSaveBehavior: PropertySaveBehavior.Throw,
sentinel: new Guid("00000000-0000-0000-0000-000000000000"));
id.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
id.AddAnnotation("Relational:ColumnName", "id");
id.AddAnnotation("Relational:DefaultValueSql", "gen_random_uuid()");
var activeVersion = runtimeEntityType.AddProperty(
"ActiveVersion",
typeof(int?),
propertyInfo: typeof(PackEntity).GetProperty("ActiveVersion", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(PackEntity).GetField("<ActiveVersion>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
activeVersion.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
activeVersion.AddAnnotation("Relational:ColumnName", "active_version");
var createdAt = runtimeEntityType.AddProperty(
"CreatedAt",
typeof(DateTimeOffset),
propertyInfo: typeof(PackEntity).GetProperty("CreatedAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(PackEntity).GetField("<CreatedAt>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
sentinel: new DateTimeOffset(new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 0, 0, 0, 0)));
createdAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
createdAt.AddAnnotation("Relational:ColumnName", "created_at");
createdAt.AddAnnotation("Relational:DefaultValueSql", "now()");
var createdBy = runtimeEntityType.AddProperty(
"CreatedBy",
typeof(string),
propertyInfo: typeof(PackEntity).GetProperty("CreatedBy", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(PackEntity).GetField("<CreatedBy>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
createdBy.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
createdBy.AddAnnotation("Relational:ColumnName", "created_by");
var description = runtimeEntityType.AddProperty(
"Description",
typeof(string),
propertyInfo: typeof(PackEntity).GetProperty("Description", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(PackEntity).GetField("<Description>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
description.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
description.AddAnnotation("Relational:ColumnName", "description");
var displayName = runtimeEntityType.AddProperty(
"DisplayName",
typeof(string),
propertyInfo: typeof(PackEntity).GetProperty("DisplayName", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(PackEntity).GetField("<DisplayName>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
displayName.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
displayName.AddAnnotation("Relational:ColumnName", "display_name");
var isBuiltin = runtimeEntityType.AddProperty(
"IsBuiltin",
typeof(bool),
propertyInfo: typeof(PackEntity).GetProperty("IsBuiltin", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(PackEntity).GetField("<IsBuiltin>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
sentinel: false);
isBuiltin.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
isBuiltin.AddAnnotation("Relational:ColumnName", "is_builtin");
var isDeprecated = runtimeEntityType.AddProperty(
"IsDeprecated",
typeof(bool),
propertyInfo: typeof(PackEntity).GetProperty("IsDeprecated", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(PackEntity).GetField("<IsDeprecated>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
sentinel: false);
isDeprecated.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
isDeprecated.AddAnnotation("Relational:ColumnName", "is_deprecated");
var metadata = runtimeEntityType.AddProperty(
"Metadata",
typeof(string),
propertyInfo: typeof(PackEntity).GetProperty("Metadata", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(PackEntity).GetField("<Metadata>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
metadata.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
metadata.AddAnnotation("Relational:ColumnName", "metadata");
metadata.AddAnnotation("Relational:ColumnType", "jsonb");
var name = runtimeEntityType.AddProperty(
"Name",
typeof(string),
propertyInfo: typeof(PackEntity).GetProperty("Name", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(PackEntity).GetField("<Name>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
name.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
name.AddAnnotation("Relational:ColumnName", "name");
var tenantId = runtimeEntityType.AddProperty(
"TenantId",
typeof(string),
propertyInfo: typeof(PackEntity).GetProperty("TenantId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(PackEntity).GetField("<TenantId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
tenantId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
tenantId.AddAnnotation("Relational:ColumnName", "tenant_id");
var updatedAt = runtimeEntityType.AddProperty(
"UpdatedAt",
typeof(DateTimeOffset),
propertyInfo: typeof(PackEntity).GetProperty("UpdatedAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(PackEntity).GetField("<UpdatedAt>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
sentinel: new DateTimeOffset(new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 0, 0, 0, 0)));
updatedAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
updatedAt.AddAnnotation("Relational:ColumnName", "updated_at");
updatedAt.AddAnnotation("Relational:DefaultValueSql", "now()");
var key = runtimeEntityType.AddKey(
new[] { id });
runtimeEntityType.SetPrimaryKey(key);
key.AddAnnotation("Relational:Name", "packs_pkey");
var index = runtimeEntityType.AddIndex(
new[] { tenantId, name },
unique: true);
var idx_packs_builtin = runtimeEntityType.AddIndex(
new[] { isBuiltin },
name: "idx_packs_builtin");
var idx_packs_tenant = runtimeEntityType.AddIndex(
new[] { tenantId },
name: "idx_packs_tenant");
return runtimeEntityType;
}
public static void CreateAnnotations(RuntimeEntityType runtimeEntityType)
{
runtimeEntityType.AddAnnotation("Relational:FunctionName", null);
runtimeEntityType.AddAnnotation("Relational:Schema", "policy");
runtimeEntityType.AddAnnotation("Relational:SqlQuery", null);
runtimeEntityType.AddAnnotation("Relational:TableName", "packs");
runtimeEntityType.AddAnnotation("Relational:ViewName", null);
runtimeEntityType.AddAnnotation("Relational:ViewSchema", null);
Customize(runtimeEntityType);
}
static partial void Customize(RuntimeEntityType runtimeEntityType);
}
}

View File

@@ -0,0 +1,156 @@
// <auto-generated />
using System;
using System.Reflection;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
using StellaOps.Policy.Persistence.Postgres.Models;
#pragma warning disable 219, 612, 618
#nullable disable
namespace StellaOps.Policy.Persistence.EfCore.CompiledModels
{
[EntityFrameworkInternal]
public partial class PackVersionEntityEntityType
{
public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null)
{
var runtimeEntityType = model.AddEntityType(
"StellaOps.Policy.Persistence.Postgres.Models.PackVersionEntity",
typeof(PackVersionEntity),
baseEntityType,
propertyCount: 10,
unnamedIndexCount: 1,
namedIndexCount: 2,
keyCount: 1);
var id = runtimeEntityType.AddProperty(
"Id",
typeof(Guid),
propertyInfo: typeof(PackVersionEntity).GetProperty("Id", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(PackVersionEntity).GetField("<Id>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
afterSaveBehavior: PropertySaveBehavior.Throw,
sentinel: new Guid("00000000-0000-0000-0000-000000000000"));
id.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
id.AddAnnotation("Relational:ColumnName", "id");
id.AddAnnotation("Relational:DefaultValueSql", "gen_random_uuid()");
var createdAt = runtimeEntityType.AddProperty(
"CreatedAt",
typeof(DateTimeOffset),
propertyInfo: typeof(PackVersionEntity).GetProperty("CreatedAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(PackVersionEntity).GetField("<CreatedAt>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
sentinel: new DateTimeOffset(new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 0, 0, 0, 0)));
createdAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
createdAt.AddAnnotation("Relational:ColumnName", "created_at");
createdAt.AddAnnotation("Relational:DefaultValueSql", "now()");
var createdBy = runtimeEntityType.AddProperty(
"CreatedBy",
typeof(string),
propertyInfo: typeof(PackVersionEntity).GetProperty("CreatedBy", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(PackVersionEntity).GetField("<CreatedBy>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
createdBy.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
createdBy.AddAnnotation("Relational:ColumnName", "created_by");
var description = runtimeEntityType.AddProperty(
"Description",
typeof(string),
propertyInfo: typeof(PackVersionEntity).GetProperty("Description", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(PackVersionEntity).GetField("<Description>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
description.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
description.AddAnnotation("Relational:ColumnName", "description");
var isPublished = runtimeEntityType.AddProperty(
"IsPublished",
typeof(bool),
propertyInfo: typeof(PackVersionEntity).GetProperty("IsPublished", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(PackVersionEntity).GetField("<IsPublished>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
sentinel: false);
isPublished.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
isPublished.AddAnnotation("Relational:ColumnName", "is_published");
var packId = runtimeEntityType.AddProperty(
"PackId",
typeof(Guid),
propertyInfo: typeof(PackVersionEntity).GetProperty("PackId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(PackVersionEntity).GetField("<PackId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
sentinel: new Guid("00000000-0000-0000-0000-000000000000"));
packId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
packId.AddAnnotation("Relational:ColumnName", "pack_id");
var publishedAt = runtimeEntityType.AddProperty(
"PublishedAt",
typeof(DateTimeOffset?),
propertyInfo: typeof(PackVersionEntity).GetProperty("PublishedAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(PackVersionEntity).GetField("<PublishedAt>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
publishedAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
publishedAt.AddAnnotation("Relational:ColumnName", "published_at");
var publishedBy = runtimeEntityType.AddProperty(
"PublishedBy",
typeof(string),
propertyInfo: typeof(PackVersionEntity).GetProperty("PublishedBy", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(PackVersionEntity).GetField("<PublishedBy>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
publishedBy.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
publishedBy.AddAnnotation("Relational:ColumnName", "published_by");
var rulesHash = runtimeEntityType.AddProperty(
"RulesHash",
typeof(string),
propertyInfo: typeof(PackVersionEntity).GetProperty("RulesHash", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(PackVersionEntity).GetField("<RulesHash>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
rulesHash.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
rulesHash.AddAnnotation("Relational:ColumnName", "rules_hash");
var version = runtimeEntityType.AddProperty(
"Version",
typeof(int),
propertyInfo: typeof(PackVersionEntity).GetProperty("Version", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(PackVersionEntity).GetField("<Version>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
sentinel: 0);
version.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
version.AddAnnotation("Relational:ColumnName", "version");
var key = runtimeEntityType.AddKey(
new[] { id });
runtimeEntityType.SetPrimaryKey(key);
key.AddAnnotation("Relational:Name", "pack_versions_pkey");
var index = runtimeEntityType.AddIndex(
new[] { packId, version },
unique: true);
var idx_pack_versions_pack = runtimeEntityType.AddIndex(
new[] { packId },
name: "idx_pack_versions_pack");
var idx_pack_versions_published = runtimeEntityType.AddIndex(
new[] { packId, isPublished },
name: "idx_pack_versions_published");
return runtimeEntityType;
}
public static void CreateAnnotations(RuntimeEntityType runtimeEntityType)
{
runtimeEntityType.AddAnnotation("Relational:FunctionName", null);
runtimeEntityType.AddAnnotation("Relational:Schema", "policy");
runtimeEntityType.AddAnnotation("Relational:SqlQuery", null);
runtimeEntityType.AddAnnotation("Relational:TableName", "pack_versions");
runtimeEntityType.AddAnnotation("Relational:ViewName", null);
runtimeEntityType.AddAnnotation("Relational:ViewSchema", null);
Customize(runtimeEntityType);
}
static partial void Customize(RuntimeEntityType runtimeEntityType);
}
}

View File

@@ -0,0 +1,226 @@
// <auto-generated />
using System;
using System.Reflection;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
using StellaOps.Policy.Persistence.Postgres.Models;
#pragma warning disable 219, 612, 618
#nullable disable
namespace StellaOps.Policy.Persistence.EfCore.CompiledModels
{
[EntityFrameworkInternal]
public partial class PolicyAuditEntityEntityType
{
public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null)
{
var runtimeEntityType = model.AddEntityType(
"StellaOps.Policy.Persistence.Postgres.Models.PolicyAuditEntity",
typeof(PolicyAuditEntity),
baseEntityType,
propertyCount: 18,
namedIndexCount: 3,
keyCount: 1);
var id = runtimeEntityType.AddProperty(
"Id",
typeof(long),
propertyInfo: typeof(PolicyAuditEntity).GetProperty("Id", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(PolicyAuditEntity).GetField("<Id>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
afterSaveBehavior: PropertySaveBehavior.Throw,
sentinel: 0L);
id.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
id.AddAnnotation("Relational:ColumnName", "id");
var action = runtimeEntityType.AddProperty(
"Action",
typeof(string),
propertyInfo: typeof(PolicyAuditEntity).GetProperty("Action", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(PolicyAuditEntity).GetField("<Action>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
action.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
action.AddAnnotation("Relational:ColumnName", "action");
var correlationId = runtimeEntityType.AddProperty(
"CorrelationId",
typeof(string),
propertyInfo: typeof(PolicyAuditEntity).GetProperty("CorrelationId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(PolicyAuditEntity).GetField("<CorrelationId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
correlationId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
correlationId.AddAnnotation("Relational:ColumnName", "correlation_id");
var createdAt = runtimeEntityType.AddProperty(
"CreatedAt",
typeof(DateTimeOffset),
propertyInfo: typeof(PolicyAuditEntity).GetProperty("CreatedAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(PolicyAuditEntity).GetField("<CreatedAt>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
sentinel: new DateTimeOffset(new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 0, 0, 0, 0)));
createdAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
createdAt.AddAnnotation("Relational:ColumnName", "created_at");
createdAt.AddAnnotation("Relational:DefaultValueSql", "now()");
var newValue = runtimeEntityType.AddProperty(
"NewValue",
typeof(string),
propertyInfo: typeof(PolicyAuditEntity).GetProperty("NewValue", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(PolicyAuditEntity).GetField("<NewValue>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
newValue.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
newValue.AddAnnotation("Relational:ColumnName", "new_value");
newValue.AddAnnotation("Relational:ColumnType", "jsonb");
var oldValue = runtimeEntityType.AddProperty(
"OldValue",
typeof(string),
propertyInfo: typeof(PolicyAuditEntity).GetProperty("OldValue", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(PolicyAuditEntity).GetField("<OldValue>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
oldValue.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
oldValue.AddAnnotation("Relational:ColumnName", "old_value");
oldValue.AddAnnotation("Relational:ColumnType", "jsonb");
var resourceId = runtimeEntityType.AddProperty(
"ResourceId",
typeof(string),
propertyInfo: typeof(PolicyAuditEntity).GetProperty("ResourceId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(PolicyAuditEntity).GetField("<ResourceId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
resourceId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
resourceId.AddAnnotation("Relational:ColumnName", "resource_id");
var resourceType = runtimeEntityType.AddProperty(
"ResourceType",
typeof(string),
propertyInfo: typeof(PolicyAuditEntity).GetProperty("ResourceType", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(PolicyAuditEntity).GetField("<ResourceType>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
resourceType.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
resourceType.AddAnnotation("Relational:ColumnName", "resource_type");
var tenantId = runtimeEntityType.AddProperty(
"TenantId",
typeof(string),
propertyInfo: typeof(PolicyAuditEntity).GetProperty("TenantId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(PolicyAuditEntity).GetField("<TenantId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
tenantId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
tenantId.AddAnnotation("Relational:ColumnName", "tenant_id");
var userId = runtimeEntityType.AddProperty(
"UserId",
typeof(Guid?),
propertyInfo: typeof(PolicyAuditEntity).GetProperty("UserId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(PolicyAuditEntity).GetField("<UserId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
userId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
userId.AddAnnotation("Relational:ColumnName", "user_id");
var vexIssuerId = runtimeEntityType.AddProperty(
"VexIssuerId",
typeof(string),
propertyInfo: typeof(PolicyAuditEntity).GetProperty("VexIssuerId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(PolicyAuditEntity).GetField("<VexIssuerId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
vexIssuerId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
vexIssuerId.AddAnnotation("Relational:ColumnName", "vex_issuer_id");
var vexIssuerName = runtimeEntityType.AddProperty(
"VexIssuerName",
typeof(string),
propertyInfo: typeof(PolicyAuditEntity).GetProperty("VexIssuerName", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(PolicyAuditEntity).GetField("<VexIssuerName>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
vexIssuerName.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
vexIssuerName.AddAnnotation("Relational:ColumnName", "vex_issuer_name");
var vexSignatureMethod = runtimeEntityType.AddProperty(
"VexSignatureMethod",
typeof(string),
propertyInfo: typeof(PolicyAuditEntity).GetProperty("VexSignatureMethod", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(PolicyAuditEntity).GetField("<VexSignatureMethod>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
vexSignatureMethod.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
vexSignatureMethod.AddAnnotation("Relational:ColumnName", "vex_signature_method");
var vexSignatureVerified = runtimeEntityType.AddProperty(
"VexSignatureVerified",
typeof(bool?),
propertyInfo: typeof(PolicyAuditEntity).GetProperty("VexSignatureVerified", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(PolicyAuditEntity).GetField("<VexSignatureVerified>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
vexSignatureVerified.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
vexSignatureVerified.AddAnnotation("Relational:ColumnName", "vex_signature_verified");
var vexTrustGateReason = runtimeEntityType.AddProperty(
"VexTrustGateReason",
typeof(string),
propertyInfo: typeof(PolicyAuditEntity).GetProperty("VexTrustGateReason", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(PolicyAuditEntity).GetField("<VexTrustGateReason>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
vexTrustGateReason.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
vexTrustGateReason.AddAnnotation("Relational:ColumnName", "vex_trust_gate_reason");
var vexTrustGateResult = runtimeEntityType.AddProperty(
"VexTrustGateResult",
typeof(string),
propertyInfo: typeof(PolicyAuditEntity).GetProperty("VexTrustGateResult", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(PolicyAuditEntity).GetField("<VexTrustGateResult>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
vexTrustGateResult.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
vexTrustGateResult.AddAnnotation("Relational:ColumnName", "vex_trust_gate_result");
var vexTrustScore = runtimeEntityType.AddProperty(
"VexTrustScore",
typeof(decimal?),
propertyInfo: typeof(PolicyAuditEntity).GetProperty("VexTrustScore", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(PolicyAuditEntity).GetField("<VexTrustScore>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
vexTrustScore.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
vexTrustScore.AddAnnotation("Relational:ColumnName", "vex_trust_score");
var vexTrustTier = runtimeEntityType.AddProperty(
"VexTrustTier",
typeof(string),
propertyInfo: typeof(PolicyAuditEntity).GetProperty("VexTrustTier", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(PolicyAuditEntity).GetField("<VexTrustTier>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
vexTrustTier.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
vexTrustTier.AddAnnotation("Relational:ColumnName", "vex_trust_tier");
var key = runtimeEntityType.AddKey(
new[] { id });
runtimeEntityType.SetPrimaryKey(key);
key.AddAnnotation("Relational:Name", "audit_pkey");
var idx_audit_created = runtimeEntityType.AddIndex(
new[] { tenantId, createdAt },
name: "idx_audit_created");
var idx_audit_resource = runtimeEntityType.AddIndex(
new[] { resourceType, resourceId },
name: "idx_audit_resource");
var idx_audit_tenant = runtimeEntityType.AddIndex(
new[] { tenantId },
name: "idx_audit_tenant");
return runtimeEntityType;
}
public static void CreateAnnotations(RuntimeEntityType runtimeEntityType)
{
runtimeEntityType.AddAnnotation("Relational:FunctionName", null);
runtimeEntityType.AddAnnotation("Relational:Schema", "policy");
runtimeEntityType.AddAnnotation("Relational:SqlQuery", null);
runtimeEntityType.AddAnnotation("Relational:TableName", "audit");
runtimeEntityType.AddAnnotation("Relational:ViewName", null);
runtimeEntityType.AddAnnotation("Relational:ViewSchema", null);
Customize(runtimeEntityType);
}
static partial void Customize(RuntimeEntityType runtimeEntityType);
}
}

View File

@@ -1,4 +1,4 @@
// <auto-generated />
// <auto-generated />
using Microsoft.EntityFrameworkCore.Infrastructure;
using StellaOps.Policy.Persistence.EfCore.CompiledModels;
using StellaOps.Policy.Persistence.EfCore.Context;

View File

@@ -1,4 +1,4 @@
// <auto-generated />
// <auto-generated />
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using StellaOps.Policy.Persistence.EfCore.Context;

View File

@@ -1,4 +1,4 @@
// <auto-generated />
// <auto-generated />
using System;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
@@ -12,16 +12,62 @@ namespace StellaOps.Policy.Persistence.EfCore.CompiledModels
public partial class PolicyDbContextModel
{
private PolicyDbContextModel()
: base(skipDetectChanges: false, modelId: new Guid("a7b2c1d0-3e4f-5a6b-8c9d-0e1f2a3b4c5d"), entityTypeCount: 20)
: base(skipDetectChanges: false, modelId: new Guid("e6cf4405-6883-4d8c-9125-ef2fd84f1268"), entityTypeCount: 24)
{
}
partial void Initialize()
{
// Entity types are registered through the DbContext OnModelCreating.
// This compiled model delegates to the runtime model builder for Policy entities.
// When dotnet ef dbcontext optimize is run against a live schema,
// this file will be regenerated with per-entity type registrations.
var advisorySourceConflictEntity = AdvisorySourceConflictEntityEntityType.Create(this);
var advisorySourceImpactEntity = AdvisorySourceImpactEntityEntityType.Create(this);
var budgetEntryEntity = BudgetEntryEntityEntityType.Create(this);
var budgetLedgerEntity = BudgetLedgerEntityEntityType.Create(this);
var conflictEntity = ConflictEntityEntityType.Create(this);
var evaluationRunEntity = EvaluationRunEntityEntityType.Create(this);
var exceptionApprovalAuditEntity = ExceptionApprovalAuditEntityEntityType.Create(this);
var exceptionApprovalRequestEntity = ExceptionApprovalRequestEntityEntityType.Create(this);
var exceptionApprovalRuleEntity = ExceptionApprovalRuleEntityEntityType.Create(this);
var exceptionEntity = ExceptionEntityEntityType.Create(this);
var explanationEntity = ExplanationEntityEntityType.Create(this);
var gateBypassAuditEntity = GateBypassAuditEntityEntityType.Create(this);
var gateDecisionEntity = GateDecisionEntityEntityType.Create(this);
var ledgerExportEntity = LedgerExportEntityEntityType.Create(this);
var packEntity = PackEntityEntityType.Create(this);
var packVersionEntity = PackVersionEntityEntityType.Create(this);
var policyAuditEntity = PolicyAuditEntityEntityType.Create(this);
var replayAuditEntity = ReplayAuditEntityEntityType.Create(this);
var riskProfileEntity = RiskProfileEntityEntityType.Create(this);
var ruleEntity = RuleEntityEntityType.Create(this);
var snapshotEntity = SnapshotEntityEntityType.Create(this);
var trustedKeyEntity = TrustedKeyEntityEntityType.Create(this);
var violationEventEntity = ViolationEventEntityEntityType.Create(this);
var workerResultEntity = WorkerResultEntityEntityType.Create(this);
AdvisorySourceConflictEntityEntityType.CreateAnnotations(advisorySourceConflictEntity);
AdvisorySourceImpactEntityEntityType.CreateAnnotations(advisorySourceImpactEntity);
BudgetEntryEntityEntityType.CreateAnnotations(budgetEntryEntity);
BudgetLedgerEntityEntityType.CreateAnnotations(budgetLedgerEntity);
ConflictEntityEntityType.CreateAnnotations(conflictEntity);
EvaluationRunEntityEntityType.CreateAnnotations(evaluationRunEntity);
ExceptionApprovalAuditEntityEntityType.CreateAnnotations(exceptionApprovalAuditEntity);
ExceptionApprovalRequestEntityEntityType.CreateAnnotations(exceptionApprovalRequestEntity);
ExceptionApprovalRuleEntityEntityType.CreateAnnotations(exceptionApprovalRuleEntity);
ExceptionEntityEntityType.CreateAnnotations(exceptionEntity);
ExplanationEntityEntityType.CreateAnnotations(explanationEntity);
GateBypassAuditEntityEntityType.CreateAnnotations(gateBypassAuditEntity);
GateDecisionEntityEntityType.CreateAnnotations(gateDecisionEntity);
LedgerExportEntityEntityType.CreateAnnotations(ledgerExportEntity);
PackEntityEntityType.CreateAnnotations(packEntity);
PackVersionEntityEntityType.CreateAnnotations(packVersionEntity);
PolicyAuditEntityEntityType.CreateAnnotations(policyAuditEntity);
ReplayAuditEntityEntityType.CreateAnnotations(replayAuditEntity);
RiskProfileEntityEntityType.CreateAnnotations(riskProfileEntity);
RuleEntityEntityType.CreateAnnotations(ruleEntity);
SnapshotEntityEntityType.CreateAnnotations(snapshotEntity);
TrustedKeyEntityEntityType.CreateAnnotations(trustedKeyEntity);
ViolationEventEntityEntityType.CreateAnnotations(violationEventEntity);
WorkerResultEntityEntityType.CreateAnnotations(workerResultEntity);
AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
AddAnnotation("ProductVersion", "10.0.0");
AddAnnotation("Relational:MaxIdentifierLength", 63);

View File

@@ -0,0 +1,234 @@
// <auto-generated />
using System;
using System.Reflection;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
using StellaOps.Policy.Persistence.Postgres.Models;
#pragma warning disable 219, 612, 618
#nullable disable
namespace StellaOps.Policy.Persistence.EfCore.CompiledModels
{
[EntityFrameworkInternal]
public partial class ReplayAuditEntityEntityType
{
public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null)
{
var runtimeEntityType = model.AddEntityType(
"StellaOps.Policy.Persistence.Postgres.Models.ReplayAuditEntity",
typeof(ReplayAuditEntity),
baseEntityType,
propertyCount: 18,
namedIndexCount: 2,
keyCount: 1);
var replayId = runtimeEntityType.AddProperty(
"ReplayId",
typeof(Guid),
propertyInfo: typeof(ReplayAuditEntity).GetProperty("ReplayId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ReplayAuditEntity).GetField("<ReplayId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
afterSaveBehavior: PropertySaveBehavior.Throw,
sentinel: new Guid("00000000-0000-0000-0000-000000000000"));
replayId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
replayId.AddAnnotation("Relational:ColumnName", "replay_id");
replayId.AddAnnotation("Relational:DefaultValueSql", "gen_random_uuid()");
var actor = runtimeEntityType.AddProperty(
"Actor",
typeof(string),
propertyInfo: typeof(ReplayAuditEntity).GetProperty("Actor", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ReplayAuditEntity).GetField("<Actor>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true,
maxLength: 256);
actor.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
actor.AddAnnotation("Relational:ColumnName", "actor");
var bomRef = runtimeEntityType.AddProperty(
"BomRef",
typeof(string),
propertyInfo: typeof(ReplayAuditEntity).GetProperty("BomRef", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ReplayAuditEntity).GetField("<BomRef>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
maxLength: 512);
bomRef.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
bomRef.AddAnnotation("Relational:ColumnName", "bom_ref");
var createdAt = runtimeEntityType.AddProperty(
"CreatedAt",
typeof(DateTimeOffset),
propertyInfo: typeof(ReplayAuditEntity).GetProperty("CreatedAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ReplayAuditEntity).GetField("<CreatedAt>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
sentinel: new DateTimeOffset(new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 0, 0, 0, 0)));
createdAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
createdAt.AddAnnotation("Relational:ColumnName", "created_at");
createdAt.AddAnnotation("Relational:DefaultValueSql", "now()");
var durationMs = runtimeEntityType.AddProperty(
"DurationMs",
typeof(int?),
propertyInfo: typeof(ReplayAuditEntity).GetProperty("DurationMs", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ReplayAuditEntity).GetField("<DurationMs>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
durationMs.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
durationMs.AddAnnotation("Relational:ColumnName", "duration_ms");
var match = runtimeEntityType.AddProperty(
"Match",
typeof(bool),
propertyInfo: typeof(ReplayAuditEntity).GetProperty("Match", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ReplayAuditEntity).GetField("<Match>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
sentinel: false);
match.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
match.AddAnnotation("Relational:ColumnName", "match");
var mismatchReason = runtimeEntityType.AddProperty(
"MismatchReason",
typeof(string),
propertyInfo: typeof(ReplayAuditEntity).GetProperty("MismatchReason", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ReplayAuditEntity).GetField("<MismatchReason>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
mismatchReason.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
mismatchReason.AddAnnotation("Relational:ColumnName", "mismatch_reason");
var originalHash = runtimeEntityType.AddProperty(
"OriginalHash",
typeof(string),
propertyInfo: typeof(ReplayAuditEntity).GetProperty("OriginalHash", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ReplayAuditEntity).GetField("<OriginalHash>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true,
maxLength: 128);
originalHash.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
originalHash.AddAnnotation("Relational:ColumnName", "original_hash");
var policyBundleHash = runtimeEntityType.AddProperty(
"PolicyBundleHash",
typeof(string),
propertyInfo: typeof(ReplayAuditEntity).GetProperty("PolicyBundleHash", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ReplayAuditEntity).GetField("<PolicyBundleHash>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true,
maxLength: 128);
policyBundleHash.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
policyBundleHash.AddAnnotation("Relational:ColumnName", "policy_bundle_hash");
var policyBundleId = runtimeEntityType.AddProperty(
"PolicyBundleId",
typeof(string),
propertyInfo: typeof(ReplayAuditEntity).GetProperty("PolicyBundleId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ReplayAuditEntity).GetField("<PolicyBundleId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
policyBundleId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
policyBundleId.AddAnnotation("Relational:ColumnName", "policy_bundle_id");
var rekorUuid = runtimeEntityType.AddProperty(
"RekorUuid",
typeof(string),
propertyInfo: typeof(ReplayAuditEntity).GetProperty("RekorUuid", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ReplayAuditEntity).GetField("<RekorUuid>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true,
maxLength: 128);
rekorUuid.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
rekorUuid.AddAnnotation("Relational:ColumnName", "rekor_uuid");
var replayedAt = runtimeEntityType.AddProperty(
"ReplayedAt",
typeof(DateTimeOffset),
propertyInfo: typeof(ReplayAuditEntity).GetProperty("ReplayedAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ReplayAuditEntity).GetField("<ReplayedAt>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
sentinel: new DateTimeOffset(new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 0, 0, 0, 0)));
replayedAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
replayedAt.AddAnnotation("Relational:ColumnName", "replayed_at");
replayedAt.AddAnnotation("Relational:DefaultValueSql", "now()");
var replayedHash = runtimeEntityType.AddProperty(
"ReplayedHash",
typeof(string),
propertyInfo: typeof(ReplayAuditEntity).GetProperty("ReplayedHash", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ReplayAuditEntity).GetField("<ReplayedHash>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true,
maxLength: 128);
replayedHash.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
replayedHash.AddAnnotation("Relational:ColumnName", "replayed_hash");
var requestContext = runtimeEntityType.AddProperty(
"RequestContext",
typeof(string),
propertyInfo: typeof(ReplayAuditEntity).GetProperty("RequestContext", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ReplayAuditEntity).GetField("<RequestContext>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
requestContext.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
requestContext.AddAnnotation("Relational:ColumnName", "request_context");
requestContext.AddAnnotation("Relational:ColumnType", "jsonb");
var source = runtimeEntityType.AddProperty(
"Source",
typeof(string),
propertyInfo: typeof(ReplayAuditEntity).GetProperty("Source", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ReplayAuditEntity).GetField("<Source>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true,
maxLength: 64);
source.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
source.AddAnnotation("Relational:ColumnName", "source");
var tenantId = runtimeEntityType.AddProperty(
"TenantId",
typeof(Guid),
propertyInfo: typeof(ReplayAuditEntity).GetProperty("TenantId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ReplayAuditEntity).GetField("<TenantId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
sentinel: new Guid("00000000-0000-0000-0000-000000000000"));
tenantId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
tenantId.AddAnnotation("Relational:ColumnName", "tenant_id");
var verdictHash = runtimeEntityType.AddProperty(
"VerdictHash",
typeof(string),
propertyInfo: typeof(ReplayAuditEntity).GetProperty("VerdictHash", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ReplayAuditEntity).GetField("<VerdictHash>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
maxLength: 128);
verdictHash.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
verdictHash.AddAnnotation("Relational:ColumnName", "verdict_hash");
var verifierDigest = runtimeEntityType.AddProperty(
"VerifierDigest",
typeof(string),
propertyInfo: typeof(ReplayAuditEntity).GetProperty("VerifierDigest", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ReplayAuditEntity).GetField("<VerifierDigest>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true,
maxLength: 128);
verifierDigest.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
verifierDigest.AddAnnotation("Relational:ColumnName", "verifier_digest");
var key = runtimeEntityType.AddKey(
new[] { replayId });
runtimeEntityType.SetPrimaryKey(key);
key.AddAnnotation("Relational:Name", "replay_audit_pkey");
var idx_replay_audit_bom_ref = runtimeEntityType.AddIndex(
new[] { tenantId, bomRef, replayedAt },
name: "idx_replay_audit_bom_ref");
var idx_replay_audit_tenant_replayed = runtimeEntityType.AddIndex(
new[] { tenantId, replayedAt },
name: "idx_replay_audit_tenant_replayed");
return runtimeEntityType;
}
public static void CreateAnnotations(RuntimeEntityType runtimeEntityType)
{
runtimeEntityType.AddAnnotation("Relational:FunctionName", null);
runtimeEntityType.AddAnnotation("Relational:Schema", "policy");
runtimeEntityType.AddAnnotation("Relational:SqlQuery", null);
runtimeEntityType.AddAnnotation("Relational:TableName", "replay_audit");
runtimeEntityType.AddAnnotation("Relational:ViewName", null);
runtimeEntityType.AddAnnotation("Relational:ViewSchema", null);
Customize(runtimeEntityType);
}
static partial void Customize(RuntimeEntityType runtimeEntityType);
}
}

View File

@@ -0,0 +1,189 @@
// <auto-generated />
using System;
using System.Reflection;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
using StellaOps.Policy.Persistence.Postgres.Models;
#pragma warning disable 219, 612, 618
#nullable disable
namespace StellaOps.Policy.Persistence.EfCore.CompiledModels
{
[EntityFrameworkInternal]
public partial class RiskProfileEntityEntityType
{
public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null)
{
var runtimeEntityType = model.AddEntityType(
"StellaOps.Policy.Persistence.Postgres.Models.RiskProfileEntity",
typeof(RiskProfileEntity),
baseEntityType,
propertyCount: 14,
unnamedIndexCount: 1,
namedIndexCount: 1,
keyCount: 1);
var id = runtimeEntityType.AddProperty(
"Id",
typeof(Guid),
propertyInfo: typeof(RiskProfileEntity).GetProperty("Id", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(RiskProfileEntity).GetField("<Id>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
afterSaveBehavior: PropertySaveBehavior.Throw,
sentinel: new Guid("00000000-0000-0000-0000-000000000000"));
id.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
id.AddAnnotation("Relational:ColumnName", "id");
id.AddAnnotation("Relational:DefaultValueSql", "gen_random_uuid()");
var createdAt = runtimeEntityType.AddProperty(
"CreatedAt",
typeof(DateTimeOffset),
propertyInfo: typeof(RiskProfileEntity).GetProperty("CreatedAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(RiskProfileEntity).GetField("<CreatedAt>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
sentinel: new DateTimeOffset(new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 0, 0, 0, 0)));
createdAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
createdAt.AddAnnotation("Relational:ColumnName", "created_at");
createdAt.AddAnnotation("Relational:DefaultValueSql", "now()");
var createdBy = runtimeEntityType.AddProperty(
"CreatedBy",
typeof(string),
propertyInfo: typeof(RiskProfileEntity).GetProperty("CreatedBy", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(RiskProfileEntity).GetField("<CreatedBy>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
createdBy.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
createdBy.AddAnnotation("Relational:ColumnName", "created_by");
var description = runtimeEntityType.AddProperty(
"Description",
typeof(string),
propertyInfo: typeof(RiskProfileEntity).GetProperty("Description", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(RiskProfileEntity).GetField("<Description>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
description.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
description.AddAnnotation("Relational:ColumnName", "description");
var displayName = runtimeEntityType.AddProperty(
"DisplayName",
typeof(string),
propertyInfo: typeof(RiskProfileEntity).GetProperty("DisplayName", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(RiskProfileEntity).GetField("<DisplayName>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
displayName.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
displayName.AddAnnotation("Relational:ColumnName", "display_name");
var exemptions = runtimeEntityType.AddProperty(
"Exemptions",
typeof(string),
propertyInfo: typeof(RiskProfileEntity).GetProperty("Exemptions", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(RiskProfileEntity).GetField("<Exemptions>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
exemptions.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
exemptions.AddAnnotation("Relational:ColumnName", "exemptions");
exemptions.AddAnnotation("Relational:ColumnType", "jsonb");
var isActive = runtimeEntityType.AddProperty(
"IsActive",
typeof(bool),
propertyInfo: typeof(RiskProfileEntity).GetProperty("IsActive", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(RiskProfileEntity).GetField("<IsActive>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
sentinel: false);
isActive.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
isActive.AddAnnotation("Relational:ColumnName", "is_active");
var metadata = runtimeEntityType.AddProperty(
"Metadata",
typeof(string),
propertyInfo: typeof(RiskProfileEntity).GetProperty("Metadata", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(RiskProfileEntity).GetField("<Metadata>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
metadata.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
metadata.AddAnnotation("Relational:ColumnName", "metadata");
metadata.AddAnnotation("Relational:ColumnType", "jsonb");
var name = runtimeEntityType.AddProperty(
"Name",
typeof(string),
propertyInfo: typeof(RiskProfileEntity).GetProperty("Name", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(RiskProfileEntity).GetField("<Name>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
name.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
name.AddAnnotation("Relational:ColumnName", "name");
var scoringWeights = runtimeEntityType.AddProperty(
"ScoringWeights",
typeof(string),
propertyInfo: typeof(RiskProfileEntity).GetProperty("ScoringWeights", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(RiskProfileEntity).GetField("<ScoringWeights>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
scoringWeights.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
scoringWeights.AddAnnotation("Relational:ColumnName", "scoring_weights");
scoringWeights.AddAnnotation("Relational:ColumnType", "jsonb");
var tenantId = runtimeEntityType.AddProperty(
"TenantId",
typeof(string),
propertyInfo: typeof(RiskProfileEntity).GetProperty("TenantId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(RiskProfileEntity).GetField("<TenantId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
tenantId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
tenantId.AddAnnotation("Relational:ColumnName", "tenant_id");
var thresholds = runtimeEntityType.AddProperty(
"Thresholds",
typeof(string),
propertyInfo: typeof(RiskProfileEntity).GetProperty("Thresholds", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(RiskProfileEntity).GetField("<Thresholds>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
thresholds.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
thresholds.AddAnnotation("Relational:ColumnName", "thresholds");
thresholds.AddAnnotation("Relational:ColumnType", "jsonb");
var updatedAt = runtimeEntityType.AddProperty(
"UpdatedAt",
typeof(DateTimeOffset),
propertyInfo: typeof(RiskProfileEntity).GetProperty("UpdatedAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(RiskProfileEntity).GetField("<UpdatedAt>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
sentinel: new DateTimeOffset(new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 0, 0, 0, 0)));
updatedAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
updatedAt.AddAnnotation("Relational:ColumnName", "updated_at");
updatedAt.AddAnnotation("Relational:DefaultValueSql", "now()");
var version = runtimeEntityType.AddProperty(
"Version",
typeof(int),
propertyInfo: typeof(RiskProfileEntity).GetProperty("Version", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(RiskProfileEntity).GetField("<Version>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
sentinel: 0);
version.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
version.AddAnnotation("Relational:ColumnName", "version");
var key = runtimeEntityType.AddKey(
new[] { id });
runtimeEntityType.SetPrimaryKey(key);
key.AddAnnotation("Relational:Name", "risk_profiles_pkey");
var index = runtimeEntityType.AddIndex(
new[] { tenantId, name, version },
unique: true);
var idx_risk_profiles_tenant = runtimeEntityType.AddIndex(
new[] { tenantId },
name: "idx_risk_profiles_tenant");
return runtimeEntityType;
}
public static void CreateAnnotations(RuntimeEntityType runtimeEntityType)
{
runtimeEntityType.AddAnnotation("Relational:FunctionName", null);
runtimeEntityType.AddAnnotation("Relational:Schema", "policy");
runtimeEntityType.AddAnnotation("Relational:SqlQuery", null);
runtimeEntityType.AddAnnotation("Relational:TableName", "risk_profiles");
runtimeEntityType.AddAnnotation("Relational:ViewName", null);
runtimeEntityType.AddAnnotation("Relational:ViewSchema", null);
Customize(runtimeEntityType);
}
static partial void Customize(RuntimeEntityType runtimeEntityType);
}
}

View File

@@ -0,0 +1,175 @@
// <auto-generated />
using System;
using System.Reflection;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
using StellaOps.Policy.Persistence.Postgres.Models;
#pragma warning disable 219, 612, 618
#nullable disable
namespace StellaOps.Policy.Persistence.EfCore.CompiledModels
{
[EntityFrameworkInternal]
public partial class RuleEntityEntityType
{
public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null)
{
var runtimeEntityType = model.AddEntityType(
"StellaOps.Policy.Persistence.Postgres.Models.RuleEntity",
typeof(RuleEntity),
baseEntityType,
propertyCount: 12,
unnamedIndexCount: 1,
namedIndexCount: 1,
keyCount: 1);
var id = runtimeEntityType.AddProperty(
"Id",
typeof(Guid),
propertyInfo: typeof(RuleEntity).GetProperty("Id", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(RuleEntity).GetField("<Id>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
afterSaveBehavior: PropertySaveBehavior.Throw,
sentinel: new Guid("00000000-0000-0000-0000-000000000000"));
id.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
id.AddAnnotation("Relational:ColumnName", "id");
id.AddAnnotation("Relational:DefaultValueSql", "gen_random_uuid()");
var category = runtimeEntityType.AddProperty(
"Category",
typeof(string),
propertyInfo: typeof(RuleEntity).GetProperty("Category", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(RuleEntity).GetField("<Category>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
category.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
category.AddAnnotation("Relational:ColumnName", "category");
var content = runtimeEntityType.AddProperty(
"Content",
typeof(string),
propertyInfo: typeof(RuleEntity).GetProperty("Content", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(RuleEntity).GetField("<Content>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
content.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
content.AddAnnotation("Relational:ColumnName", "content");
var contentHash = runtimeEntityType.AddProperty(
"ContentHash",
typeof(string),
propertyInfo: typeof(RuleEntity).GetProperty("ContentHash", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(RuleEntity).GetField("<ContentHash>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
contentHash.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
contentHash.AddAnnotation("Relational:ColumnName", "content_hash");
var createdAt = runtimeEntityType.AddProperty(
"CreatedAt",
typeof(DateTimeOffset),
propertyInfo: typeof(RuleEntity).GetProperty("CreatedAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(RuleEntity).GetField("<CreatedAt>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
sentinel: new DateTimeOffset(new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 0, 0, 0, 0)));
createdAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
createdAt.AddAnnotation("Relational:ColumnName", "created_at");
createdAt.AddAnnotation("Relational:DefaultValueSql", "now()");
var description = runtimeEntityType.AddProperty(
"Description",
typeof(string),
propertyInfo: typeof(RuleEntity).GetProperty("Description", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(RuleEntity).GetField("<Description>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
description.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
description.AddAnnotation("Relational:ColumnName", "description");
var metadata = runtimeEntityType.AddProperty(
"Metadata",
typeof(string),
propertyInfo: typeof(RuleEntity).GetProperty("Metadata", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(RuleEntity).GetField("<Metadata>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
metadata.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
metadata.AddAnnotation("Relational:ColumnName", "metadata");
metadata.AddAnnotation("Relational:ColumnType", "jsonb");
var name = runtimeEntityType.AddProperty(
"Name",
typeof(string),
propertyInfo: typeof(RuleEntity).GetProperty("Name", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(RuleEntity).GetField("<Name>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
name.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
name.AddAnnotation("Relational:ColumnName", "name");
var packVersionId = runtimeEntityType.AddProperty(
"PackVersionId",
typeof(Guid),
propertyInfo: typeof(RuleEntity).GetProperty("PackVersionId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(RuleEntity).GetField("<PackVersionId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
sentinel: new Guid("00000000-0000-0000-0000-000000000000"));
packVersionId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
packVersionId.AddAnnotation("Relational:ColumnName", "pack_version_id");
var ruleType = runtimeEntityType.AddProperty(
"RuleType",
typeof(RuleType),
propertyInfo: typeof(RuleEntity).GetProperty("RuleType", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(RuleEntity).GetField("<RuleType>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
ruleType.SetValueConverter(new ValueConverter<RuleType, string>(
string (RuleType v) => ((object)v).ToString().ToLowerInvariant(),
RuleType (string v) => Enum.Parse<RuleType>(v, true)));
ruleType.SetSentinelFromProviderValue("rego");
ruleType.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
ruleType.AddAnnotation("Relational:ColumnName", "rule_type");
var severity = runtimeEntityType.AddProperty(
"Severity",
typeof(RuleSeverity),
propertyInfo: typeof(RuleEntity).GetProperty("Severity", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(RuleEntity).GetField("<Severity>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
severity.SetValueConverter(new ValueConverter<RuleSeverity, string>(
string (RuleSeverity v) => ((object)v).ToString().ToLowerInvariant(),
RuleSeverity (string v) => Enum.Parse<RuleSeverity>(v, true)));
severity.SetSentinelFromProviderValue("critical");
severity.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
severity.AddAnnotation("Relational:ColumnName", "severity");
var tags = runtimeEntityType.AddProperty(
"Tags",
typeof(string[]),
propertyInfo: typeof(RuleEntity).GetProperty("Tags", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(RuleEntity).GetField("<Tags>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
var tagsElementType = tags.SetElementType(typeof(string));
tags.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
tags.AddAnnotation("Relational:ColumnName", "tags");
var key = runtimeEntityType.AddKey(
new[] { id });
runtimeEntityType.SetPrimaryKey(key);
key.AddAnnotation("Relational:Name", "rules_pkey");
var index = runtimeEntityType.AddIndex(
new[] { packVersionId, name },
unique: true);
var idx_rules_pack_version = runtimeEntityType.AddIndex(
new[] { packVersionId },
name: "idx_rules_pack_version");
return runtimeEntityType;
}
public static void CreateAnnotations(RuntimeEntityType runtimeEntityType)
{
runtimeEntityType.AddAnnotation("Relational:FunctionName", null);
runtimeEntityType.AddAnnotation("Relational:Schema", "policy");
runtimeEntityType.AddAnnotation("Relational:SqlQuery", null);
runtimeEntityType.AddAnnotation("Relational:TableName", "rules");
runtimeEntityType.AddAnnotation("Relational:ViewName", null);
runtimeEntityType.AddAnnotation("Relational:ViewSchema", null);
Customize(runtimeEntityType);
}
static partial void Customize(RuntimeEntityType runtimeEntityType);
}
}

View File

@@ -0,0 +1,149 @@
// <auto-generated />
using System;
using System.Reflection;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
using StellaOps.Policy.Persistence.Postgres.Models;
#pragma warning disable 219, 612, 618
#nullable disable
namespace StellaOps.Policy.Persistence.EfCore.CompiledModels
{
[EntityFrameworkInternal]
public partial class SnapshotEntityEntityType
{
public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null)
{
var runtimeEntityType = model.AddEntityType(
"StellaOps.Policy.Persistence.Postgres.Models.SnapshotEntity",
typeof(SnapshotEntity),
baseEntityType,
propertyCount: 9,
unnamedIndexCount: 1,
namedIndexCount: 3,
keyCount: 1);
var id = runtimeEntityType.AddProperty(
"Id",
typeof(Guid),
propertyInfo: typeof(SnapshotEntity).GetProperty("Id", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(SnapshotEntity).GetField("<Id>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
afterSaveBehavior: PropertySaveBehavior.Throw,
sentinel: new Guid("00000000-0000-0000-0000-000000000000"));
id.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
id.AddAnnotation("Relational:ColumnName", "id");
id.AddAnnotation("Relational:DefaultValueSql", "gen_random_uuid()");
var content = runtimeEntityType.AddProperty(
"Content",
typeof(string),
propertyInfo: typeof(SnapshotEntity).GetProperty("Content", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(SnapshotEntity).GetField("<Content>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
content.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
content.AddAnnotation("Relational:ColumnName", "content");
content.AddAnnotation("Relational:ColumnType", "jsonb");
var contentDigest = runtimeEntityType.AddProperty(
"ContentDigest",
typeof(string),
propertyInfo: typeof(SnapshotEntity).GetProperty("ContentDigest", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(SnapshotEntity).GetField("<ContentDigest>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
contentDigest.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
contentDigest.AddAnnotation("Relational:ColumnName", "content_digest");
var createdAt = runtimeEntityType.AddProperty(
"CreatedAt",
typeof(DateTimeOffset),
propertyInfo: typeof(SnapshotEntity).GetProperty("CreatedAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(SnapshotEntity).GetField("<CreatedAt>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
sentinel: new DateTimeOffset(new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 0, 0, 0, 0)));
createdAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
createdAt.AddAnnotation("Relational:ColumnName", "created_at");
createdAt.AddAnnotation("Relational:DefaultValueSql", "now()");
var createdBy = runtimeEntityType.AddProperty(
"CreatedBy",
typeof(string),
propertyInfo: typeof(SnapshotEntity).GetProperty("CreatedBy", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(SnapshotEntity).GetField("<CreatedBy>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
createdBy.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
createdBy.AddAnnotation("Relational:ColumnName", "created_by");
var metadata = runtimeEntityType.AddProperty(
"Metadata",
typeof(string),
propertyInfo: typeof(SnapshotEntity).GetProperty("Metadata", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(SnapshotEntity).GetField("<Metadata>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
metadata.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
metadata.AddAnnotation("Relational:ColumnName", "metadata");
metadata.AddAnnotation("Relational:ColumnType", "jsonb");
var policyId = runtimeEntityType.AddProperty(
"PolicyId",
typeof(Guid),
propertyInfo: typeof(SnapshotEntity).GetProperty("PolicyId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(SnapshotEntity).GetField("<PolicyId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
sentinel: new Guid("00000000-0000-0000-0000-000000000000"));
policyId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
policyId.AddAnnotation("Relational:ColumnName", "policy_id");
var tenantId = runtimeEntityType.AddProperty(
"TenantId",
typeof(string),
propertyInfo: typeof(SnapshotEntity).GetProperty("TenantId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(SnapshotEntity).GetField("<TenantId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
tenantId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
tenantId.AddAnnotation("Relational:ColumnName", "tenant_id");
var version = runtimeEntityType.AddProperty(
"Version",
typeof(int),
propertyInfo: typeof(SnapshotEntity).GetProperty("Version", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(SnapshotEntity).GetField("<Version>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
sentinel: 0);
version.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
version.AddAnnotation("Relational:ColumnName", "version");
var key = runtimeEntityType.AddKey(
new[] { id });
runtimeEntityType.SetPrimaryKey(key);
key.AddAnnotation("Relational:Name", "snapshots_pkey");
var index = runtimeEntityType.AddIndex(
new[] { tenantId, policyId, version },
unique: true);
var idx_snapshots_digest = runtimeEntityType.AddIndex(
new[] { contentDigest },
name: "idx_snapshots_digest");
var idx_snapshots_policy = runtimeEntityType.AddIndex(
new[] { tenantId, policyId },
name: "idx_snapshots_policy");
var idx_snapshots_tenant = runtimeEntityType.AddIndex(
new[] { tenantId },
name: "idx_snapshots_tenant");
return runtimeEntityType;
}
public static void CreateAnnotations(RuntimeEntityType runtimeEntityType)
{
runtimeEntityType.AddAnnotation("Relational:FunctionName", null);
runtimeEntityType.AddAnnotation("Relational:Schema", "policy");
runtimeEntityType.AddAnnotation("Relational:SqlQuery", null);
runtimeEntityType.AddAnnotation("Relational:TableName", "snapshots");
runtimeEntityType.AddAnnotation("Relational:ViewName", null);
runtimeEntityType.AddAnnotation("Relational:ViewSchema", null);
Customize(runtimeEntityType);
}
static partial void Customize(RuntimeEntityType runtimeEntityType);
}
}

View File

@@ -0,0 +1,231 @@
// <auto-generated />
using System;
using System.Reflection;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
using StellaOps.Policy.Persistence.Postgres.Models;
#pragma warning disable 219, 612, 618
#nullable disable
namespace StellaOps.Policy.Persistence.EfCore.CompiledModels
{
[EntityFrameworkInternal]
public partial class TrustedKeyEntityEntityType
{
public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null)
{
var runtimeEntityType = model.AddEntityType(
"StellaOps.Policy.Persistence.Postgres.Models.TrustedKeyEntity",
typeof(TrustedKeyEntity),
baseEntityType,
propertyCount: 18,
unnamedIndexCount: 2,
namedIndexCount: 1,
keyCount: 1);
var id = runtimeEntityType.AddProperty(
"Id",
typeof(Guid),
propertyInfo: typeof(TrustedKeyEntity).GetProperty("Id", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(TrustedKeyEntity).GetField("<Id>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
afterSaveBehavior: PropertySaveBehavior.Throw,
sentinel: new Guid("00000000-0000-0000-0000-000000000000"));
id.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
id.AddAnnotation("Relational:ColumnName", "id");
id.AddAnnotation("Relational:DefaultValueSql", "gen_random_uuid()");
var algorithm = runtimeEntityType.AddProperty(
"Algorithm",
typeof(string),
propertyInfo: typeof(TrustedKeyEntity).GetProperty("Algorithm", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(TrustedKeyEntity).GetField("<Algorithm>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
algorithm.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
algorithm.AddAnnotation("Relational:ColumnName", "algorithm");
var createdAt = runtimeEntityType.AddProperty(
"CreatedAt",
typeof(DateTimeOffset),
propertyInfo: typeof(TrustedKeyEntity).GetProperty("CreatedAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(TrustedKeyEntity).GetField("<CreatedAt>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
sentinel: new DateTimeOffset(new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 0, 0, 0, 0)));
createdAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
createdAt.AddAnnotation("Relational:ColumnName", "created_at");
createdAt.AddAnnotation("Relational:DefaultValueSql", "now()");
var createdBy = runtimeEntityType.AddProperty(
"CreatedBy",
typeof(string),
propertyInfo: typeof(TrustedKeyEntity).GetProperty("CreatedBy", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(TrustedKeyEntity).GetField("<CreatedBy>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
createdBy.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
createdBy.AddAnnotation("Relational:ColumnName", "created_by");
var fingerprint = runtimeEntityType.AddProperty(
"Fingerprint",
typeof(string),
propertyInfo: typeof(TrustedKeyEntity).GetProperty("Fingerprint", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(TrustedKeyEntity).GetField("<Fingerprint>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
fingerprint.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
fingerprint.AddAnnotation("Relational:ColumnName", "fingerprint");
var isActive = runtimeEntityType.AddProperty(
"IsActive",
typeof(bool),
propertyInfo: typeof(TrustedKeyEntity).GetProperty("IsActive", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(TrustedKeyEntity).GetField("<IsActive>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
sentinel: false);
isActive.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
isActive.AddAnnotation("Relational:ColumnName", "is_active");
var issuerPattern = runtimeEntityType.AddProperty(
"IssuerPattern",
typeof(string),
propertyInfo: typeof(TrustedKeyEntity).GetProperty("IssuerPattern", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(TrustedKeyEntity).GetField("<IssuerPattern>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
issuerPattern.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
issuerPattern.AddAnnotation("Relational:ColumnName", "issuer_pattern");
var keyId = runtimeEntityType.AddProperty(
"KeyId",
typeof(string),
propertyInfo: typeof(TrustedKeyEntity).GetProperty("KeyId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(TrustedKeyEntity).GetField("<KeyId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
keyId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
keyId.AddAnnotation("Relational:ColumnName", "key_id");
var metadata = runtimeEntityType.AddProperty(
"Metadata",
typeof(string),
propertyInfo: typeof(TrustedKeyEntity).GetProperty("Metadata", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(TrustedKeyEntity).GetField("<Metadata>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
metadata.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
metadata.AddAnnotation("Relational:ColumnName", "metadata");
metadata.AddAnnotation("Relational:ColumnType", "jsonb");
var owner = runtimeEntityType.AddProperty(
"Owner",
typeof(string),
propertyInfo: typeof(TrustedKeyEntity).GetProperty("Owner", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(TrustedKeyEntity).GetField("<Owner>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
owner.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
owner.AddAnnotation("Relational:ColumnName", "owner");
var publicKeyPem = runtimeEntityType.AddProperty(
"PublicKeyPem",
typeof(string),
propertyInfo: typeof(TrustedKeyEntity).GetProperty("PublicKeyPem", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(TrustedKeyEntity).GetField("<PublicKeyPem>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
publicKeyPem.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
publicKeyPem.AddAnnotation("Relational:ColumnName", "public_key_pem");
var purposes = runtimeEntityType.AddProperty(
"Purposes",
typeof(string),
propertyInfo: typeof(TrustedKeyEntity).GetProperty("Purposes", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(TrustedKeyEntity).GetField("<Purposes>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
purposes.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
purposes.AddAnnotation("Relational:ColumnName", "purposes");
purposes.AddAnnotation("Relational:ColumnType", "jsonb");
var revokedAt = runtimeEntityType.AddProperty(
"RevokedAt",
typeof(DateTimeOffset?),
propertyInfo: typeof(TrustedKeyEntity).GetProperty("RevokedAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(TrustedKeyEntity).GetField("<RevokedAt>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
revokedAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
revokedAt.AddAnnotation("Relational:ColumnName", "revoked_at");
var revokedReason = runtimeEntityType.AddProperty(
"RevokedReason",
typeof(string),
propertyInfo: typeof(TrustedKeyEntity).GetProperty("RevokedReason", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(TrustedKeyEntity).GetField("<RevokedReason>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
revokedReason.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
revokedReason.AddAnnotation("Relational:ColumnName", "revoked_reason");
var tenantId = runtimeEntityType.AddProperty(
"TenantId",
typeof(string),
propertyInfo: typeof(TrustedKeyEntity).GetProperty("TenantId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(TrustedKeyEntity).GetField("<TenantId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
tenantId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
tenantId.AddAnnotation("Relational:ColumnName", "tenant_id");
var updatedAt = runtimeEntityType.AddProperty(
"UpdatedAt",
typeof(DateTimeOffset),
propertyInfo: typeof(TrustedKeyEntity).GetProperty("UpdatedAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(TrustedKeyEntity).GetField("<UpdatedAt>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
sentinel: new DateTimeOffset(new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 0, 0, 0, 0)));
updatedAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
updatedAt.AddAnnotation("Relational:ColumnName", "updated_at");
updatedAt.AddAnnotation("Relational:DefaultValueSql", "now()");
var validFrom = runtimeEntityType.AddProperty(
"ValidFrom",
typeof(DateTimeOffset),
propertyInfo: typeof(TrustedKeyEntity).GetProperty("ValidFrom", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(TrustedKeyEntity).GetField("<ValidFrom>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
sentinel: new DateTimeOffset(new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 0, 0, 0, 0)));
validFrom.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
validFrom.AddAnnotation("Relational:ColumnName", "valid_from");
validFrom.AddAnnotation("Relational:DefaultValueSql", "now()");
var validUntil = runtimeEntityType.AddProperty(
"ValidUntil",
typeof(DateTimeOffset?),
propertyInfo: typeof(TrustedKeyEntity).GetProperty("ValidUntil", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(TrustedKeyEntity).GetField("<ValidUntil>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
validUntil.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
validUntil.AddAnnotation("Relational:ColumnName", "valid_until");
var key = runtimeEntityType.AddKey(
new[] { id });
runtimeEntityType.SetPrimaryKey(key);
key.AddAnnotation("Relational:Name", "trusted_keys_pkey");
var index = runtimeEntityType.AddIndex(
new[] { tenantId, fingerprint },
unique: true);
var index0 = runtimeEntityType.AddIndex(
new[] { tenantId, keyId },
unique: true);
var idx_trusted_keys_tenant = runtimeEntityType.AddIndex(
new[] { tenantId },
name: "idx_trusted_keys_tenant");
return runtimeEntityType;
}
public static void CreateAnnotations(RuntimeEntityType runtimeEntityType)
{
runtimeEntityType.AddAnnotation("Relational:FunctionName", null);
runtimeEntityType.AddAnnotation("Relational:Schema", "policy");
runtimeEntityType.AddAnnotation("Relational:SqlQuery", null);
runtimeEntityType.AddAnnotation("Relational:TableName", "trusted_keys");
runtimeEntityType.AddAnnotation("Relational:ViewName", null);
runtimeEntityType.AddAnnotation("Relational:ViewSchema", null);
Customize(runtimeEntityType);
}
static partial void Customize(RuntimeEntityType runtimeEntityType);
}
}

View File

@@ -0,0 +1,171 @@
// <auto-generated />
using System;
using System.Reflection;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
using StellaOps.Policy.Persistence.Postgres.Models;
#pragma warning disable 219, 612, 618
#nullable disable
namespace StellaOps.Policy.Persistence.EfCore.CompiledModels
{
[EntityFrameworkInternal]
public partial class ViolationEventEntityEntityType
{
public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null)
{
var runtimeEntityType = model.AddEntityType(
"StellaOps.Policy.Persistence.Postgres.Models.ViolationEventEntity",
typeof(ViolationEventEntity),
baseEntityType,
propertyCount: 12,
namedIndexCount: 3,
keyCount: 1);
var id = runtimeEntityType.AddProperty(
"Id",
typeof(Guid),
propertyInfo: typeof(ViolationEventEntity).GetProperty("Id", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ViolationEventEntity).GetField("<Id>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
afterSaveBehavior: PropertySaveBehavior.Throw,
sentinel: new Guid("00000000-0000-0000-0000-000000000000"));
id.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
id.AddAnnotation("Relational:ColumnName", "id");
id.AddAnnotation("Relational:DefaultValueSql", "gen_random_uuid()");
var correlationId = runtimeEntityType.AddProperty(
"CorrelationId",
typeof(string),
propertyInfo: typeof(ViolationEventEntity).GetProperty("CorrelationId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ViolationEventEntity).GetField("<CorrelationId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
correlationId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
correlationId.AddAnnotation("Relational:ColumnName", "correlation_id");
var createdAt = runtimeEntityType.AddProperty(
"CreatedAt",
typeof(DateTimeOffset),
propertyInfo: typeof(ViolationEventEntity).GetProperty("CreatedAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ViolationEventEntity).GetField("<CreatedAt>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
sentinel: new DateTimeOffset(new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 0, 0, 0, 0)));
createdAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
createdAt.AddAnnotation("Relational:ColumnName", "created_at");
createdAt.AddAnnotation("Relational:DefaultValueSql", "now()");
var details = runtimeEntityType.AddProperty(
"Details",
typeof(string),
propertyInfo: typeof(ViolationEventEntity).GetProperty("Details", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ViolationEventEntity).GetField("<Details>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
details.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
details.AddAnnotation("Relational:ColumnName", "details");
details.AddAnnotation("Relational:ColumnType", "jsonb");
var occurredAt = runtimeEntityType.AddProperty(
"OccurredAt",
typeof(DateTimeOffset),
propertyInfo: typeof(ViolationEventEntity).GetProperty("OccurredAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ViolationEventEntity).GetField("<OccurredAt>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
sentinel: new DateTimeOffset(new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 0, 0, 0, 0)));
occurredAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
occurredAt.AddAnnotation("Relational:ColumnName", "occurred_at");
var policyId = runtimeEntityType.AddProperty(
"PolicyId",
typeof(Guid),
propertyInfo: typeof(ViolationEventEntity).GetProperty("PolicyId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ViolationEventEntity).GetField("<PolicyId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
sentinel: new Guid("00000000-0000-0000-0000-000000000000"));
policyId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
policyId.AddAnnotation("Relational:ColumnName", "policy_id");
var remediation = runtimeEntityType.AddProperty(
"Remediation",
typeof(string),
propertyInfo: typeof(ViolationEventEntity).GetProperty("Remediation", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ViolationEventEntity).GetField("<Remediation>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
remediation.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
remediation.AddAnnotation("Relational:ColumnName", "remediation");
var ruleId = runtimeEntityType.AddProperty(
"RuleId",
typeof(string),
propertyInfo: typeof(ViolationEventEntity).GetProperty("RuleId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ViolationEventEntity).GetField("<RuleId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
ruleId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
ruleId.AddAnnotation("Relational:ColumnName", "rule_id");
var severity = runtimeEntityType.AddProperty(
"Severity",
typeof(string),
propertyInfo: typeof(ViolationEventEntity).GetProperty("Severity", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ViolationEventEntity).GetField("<Severity>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
severity.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
severity.AddAnnotation("Relational:ColumnName", "severity");
var subjectCve = runtimeEntityType.AddProperty(
"SubjectCve",
typeof(string),
propertyInfo: typeof(ViolationEventEntity).GetProperty("SubjectCve", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ViolationEventEntity).GetField("<SubjectCve>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
subjectCve.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
subjectCve.AddAnnotation("Relational:ColumnName", "subject_cve");
var subjectPurl = runtimeEntityType.AddProperty(
"SubjectPurl",
typeof(string),
propertyInfo: typeof(ViolationEventEntity).GetProperty("SubjectPurl", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ViolationEventEntity).GetField("<SubjectPurl>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
subjectPurl.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
subjectPurl.AddAnnotation("Relational:ColumnName", "subject_purl");
var tenantId = runtimeEntityType.AddProperty(
"TenantId",
typeof(string),
propertyInfo: typeof(ViolationEventEntity).GetProperty("TenantId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(ViolationEventEntity).GetField("<TenantId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
tenantId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
tenantId.AddAnnotation("Relational:ColumnName", "tenant_id");
var key = runtimeEntityType.AddKey(
new[] { id });
runtimeEntityType.SetPrimaryKey(key);
key.AddAnnotation("Relational:Name", "violation_events_pkey");
var idx_violation_events_occurred = runtimeEntityType.AddIndex(
new[] { tenantId, occurredAt },
name: "idx_violation_events_occurred");
var idx_violation_events_policy = runtimeEntityType.AddIndex(
new[] { tenantId, policyId },
name: "idx_violation_events_policy");
var idx_violation_events_tenant = runtimeEntityType.AddIndex(
new[] { tenantId },
name: "idx_violation_events_tenant");
return runtimeEntityType;
}
public static void CreateAnnotations(RuntimeEntityType runtimeEntityType)
{
runtimeEntityType.AddAnnotation("Relational:FunctionName", null);
runtimeEntityType.AddAnnotation("Relational:Schema", "policy");
runtimeEntityType.AddAnnotation("Relational:SqlQuery", null);
runtimeEntityType.AddAnnotation("Relational:TableName", "violation_events");
runtimeEntityType.AddAnnotation("Relational:ViewName", null);
runtimeEntityType.AddAnnotation("Relational:ViewSchema", null);
Customize(runtimeEntityType);
}
static partial void Customize(RuntimeEntityType runtimeEntityType);
}
}

View File

@@ -0,0 +1,226 @@
// <auto-generated />
using System;
using System.Reflection;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
using StellaOps.Policy.Persistence.Postgres.Models;
#pragma warning disable 219, 612, 618
#nullable disable
namespace StellaOps.Policy.Persistence.EfCore.CompiledModels
{
[EntityFrameworkInternal]
public partial class WorkerResultEntityEntityType
{
public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null)
{
var runtimeEntityType = model.AddEntityType(
"StellaOps.Policy.Persistence.Postgres.Models.WorkerResultEntity",
typeof(WorkerResultEntity),
baseEntityType,
propertyCount: 18,
unnamedIndexCount: 1,
namedIndexCount: 2,
keyCount: 1);
var id = runtimeEntityType.AddProperty(
"Id",
typeof(Guid),
propertyInfo: typeof(WorkerResultEntity).GetProperty("Id", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(WorkerResultEntity).GetField("<Id>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
afterSaveBehavior: PropertySaveBehavior.Throw,
sentinel: new Guid("00000000-0000-0000-0000-000000000000"));
id.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
id.AddAnnotation("Relational:ColumnName", "id");
id.AddAnnotation("Relational:DefaultValueSql", "gen_random_uuid()");
var completedAt = runtimeEntityType.AddProperty(
"CompletedAt",
typeof(DateTimeOffset?),
propertyInfo: typeof(WorkerResultEntity).GetProperty("CompletedAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(WorkerResultEntity).GetField("<CompletedAt>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
completedAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
completedAt.AddAnnotation("Relational:ColumnName", "completed_at");
var createdAt = runtimeEntityType.AddProperty(
"CreatedAt",
typeof(DateTimeOffset),
propertyInfo: typeof(WorkerResultEntity).GetProperty("CreatedAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(WorkerResultEntity).GetField("<CreatedAt>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
sentinel: new DateTimeOffset(new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 0, 0, 0, 0)));
createdAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
createdAt.AddAnnotation("Relational:ColumnName", "created_at");
createdAt.AddAnnotation("Relational:DefaultValueSql", "now()");
var createdBy = runtimeEntityType.AddProperty(
"CreatedBy",
typeof(string),
propertyInfo: typeof(WorkerResultEntity).GetProperty("CreatedBy", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(WorkerResultEntity).GetField("<CreatedBy>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
createdBy.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
createdBy.AddAnnotation("Relational:ColumnName", "created_by");
var errorMessage = runtimeEntityType.AddProperty(
"ErrorMessage",
typeof(string),
propertyInfo: typeof(WorkerResultEntity).GetProperty("ErrorMessage", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(WorkerResultEntity).GetField("<ErrorMessage>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
errorMessage.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
errorMessage.AddAnnotation("Relational:ColumnName", "error_message");
var inputHash = runtimeEntityType.AddProperty(
"InputHash",
typeof(string),
propertyInfo: typeof(WorkerResultEntity).GetProperty("InputHash", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(WorkerResultEntity).GetField("<InputHash>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
inputHash.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
inputHash.AddAnnotation("Relational:ColumnName", "input_hash");
var jobId = runtimeEntityType.AddProperty(
"JobId",
typeof(string),
propertyInfo: typeof(WorkerResultEntity).GetProperty("JobId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(WorkerResultEntity).GetField("<JobId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
jobId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
jobId.AddAnnotation("Relational:ColumnName", "job_id");
var jobType = runtimeEntityType.AddProperty(
"JobType",
typeof(string),
propertyInfo: typeof(WorkerResultEntity).GetProperty("JobType", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(WorkerResultEntity).GetField("<JobType>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
jobType.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
jobType.AddAnnotation("Relational:ColumnName", "job_type");
var maxRetries = runtimeEntityType.AddProperty(
"MaxRetries",
typeof(int),
propertyInfo: typeof(WorkerResultEntity).GetProperty("MaxRetries", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(WorkerResultEntity).GetField("<MaxRetries>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
sentinel: 0);
maxRetries.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
maxRetries.AddAnnotation("Relational:ColumnName", "max_retries");
var metadata = runtimeEntityType.AddProperty(
"Metadata",
typeof(string),
propertyInfo: typeof(WorkerResultEntity).GetProperty("Metadata", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(WorkerResultEntity).GetField("<Metadata>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
metadata.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
metadata.AddAnnotation("Relational:ColumnName", "metadata");
metadata.AddAnnotation("Relational:ColumnType", "jsonb");
var outputHash = runtimeEntityType.AddProperty(
"OutputHash",
typeof(string),
propertyInfo: typeof(WorkerResultEntity).GetProperty("OutputHash", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(WorkerResultEntity).GetField("<OutputHash>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
outputHash.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
outputHash.AddAnnotation("Relational:ColumnName", "output_hash");
var progress = runtimeEntityType.AddProperty(
"Progress",
typeof(int),
propertyInfo: typeof(WorkerResultEntity).GetProperty("Progress", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(WorkerResultEntity).GetField("<Progress>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
sentinel: 0);
progress.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
progress.AddAnnotation("Relational:ColumnName", "progress");
var result = runtimeEntityType.AddProperty(
"Result",
typeof(string),
propertyInfo: typeof(WorkerResultEntity).GetProperty("Result", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(WorkerResultEntity).GetField("<Result>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
result.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
result.AddAnnotation("Relational:ColumnName", "result");
result.AddAnnotation("Relational:ColumnType", "jsonb");
var retryCount = runtimeEntityType.AddProperty(
"RetryCount",
typeof(int),
propertyInfo: typeof(WorkerResultEntity).GetProperty("RetryCount", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(WorkerResultEntity).GetField("<RetryCount>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
sentinel: 0);
retryCount.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
retryCount.AddAnnotation("Relational:ColumnName", "retry_count");
var scheduledAt = runtimeEntityType.AddProperty(
"ScheduledAt",
typeof(DateTimeOffset?),
propertyInfo: typeof(WorkerResultEntity).GetProperty("ScheduledAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(WorkerResultEntity).GetField("<ScheduledAt>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
scheduledAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
scheduledAt.AddAnnotation("Relational:ColumnName", "scheduled_at");
var startedAt = runtimeEntityType.AddProperty(
"StartedAt",
typeof(DateTimeOffset?),
propertyInfo: typeof(WorkerResultEntity).GetProperty("StartedAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(WorkerResultEntity).GetField("<StartedAt>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
startedAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
startedAt.AddAnnotation("Relational:ColumnName", "started_at");
var status = runtimeEntityType.AddProperty(
"Status",
typeof(string),
propertyInfo: typeof(WorkerResultEntity).GetProperty("Status", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(WorkerResultEntity).GetField("<Status>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
status.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
status.AddAnnotation("Relational:ColumnName", "status");
var tenantId = runtimeEntityType.AddProperty(
"TenantId",
typeof(string),
propertyInfo: typeof(WorkerResultEntity).GetProperty("TenantId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(WorkerResultEntity).GetField("<TenantId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
tenantId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
tenantId.AddAnnotation("Relational:ColumnName", "tenant_id");
var key = runtimeEntityType.AddKey(
new[] { id });
runtimeEntityType.SetPrimaryKey(key);
key.AddAnnotation("Relational:Name", "worker_results_pkey");
var index = runtimeEntityType.AddIndex(
new[] { tenantId, jobType, jobId },
unique: true);
var idx_worker_results_status = runtimeEntityType.AddIndex(
new[] { status },
name: "idx_worker_results_status");
var idx_worker_results_tenant = runtimeEntityType.AddIndex(
new[] { tenantId },
name: "idx_worker_results_tenant");
return runtimeEntityType;
}
public static void CreateAnnotations(RuntimeEntityType runtimeEntityType)
{
runtimeEntityType.AddAnnotation("Relational:FunctionName", null);
runtimeEntityType.AddAnnotation("Relational:Schema", "policy");
runtimeEntityType.AddAnnotation("Relational:SqlQuery", null);
runtimeEntityType.AddAnnotation("Relational:TableName", "worker_results");
runtimeEntityType.AddAnnotation("Relational:ViewName", null);
runtimeEntityType.AddAnnotation("Relational:ViewSchema", null);
Customize(runtimeEntityType);
}
static partial void Customize(RuntimeEntityType runtimeEntityType);
}
}

View File

@@ -1,4 +1,5 @@
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using StellaOps.Policy.Persistence.Postgres.Models;
namespace StellaOps.Policy.Persistence.EfCore.Context;
@@ -130,10 +131,10 @@ public partial class PolicyDbContext : DbContext
entity.Property(e => e.PackVersionId).HasColumnName("pack_version_id");
entity.Property(e => e.Name).HasColumnName("name");
entity.Property(e => e.Description).HasColumnName("description");
entity.Property(e => e.RuleType).HasConversion<string>().HasColumnName("rule_type");
entity.Property(e => e.RuleType).HasConversion(new ValueConverter<RuleType, string>(v => v.ToString()!.ToLowerInvariant(), v => Enum.Parse<RuleType>(v, true))).HasColumnName("rule_type");
entity.Property(e => e.Content).HasColumnName("content");
entity.Property(e => e.ContentHash).HasColumnName("content_hash");
entity.Property(e => e.Severity).HasConversion<string>().HasColumnName("severity");
entity.Property(e => e.Severity).HasConversion(new ValueConverter<RuleSeverity, string>(v => v.ToString()!.ToLowerInvariant(), v => Enum.Parse<RuleSeverity>(v, true))).HasColumnName("severity");
entity.Property(e => e.Category).HasColumnName("category");
entity.Property(e => e.Tags).HasColumnName("tags");
entity.Property(e => e.Metadata).HasColumnType("jsonb").HasColumnName("metadata");
@@ -184,8 +185,8 @@ public partial class PolicyDbContext : DbContext
entity.Property(e => e.PackId).HasColumnName("pack_id");
entity.Property(e => e.PackVersion).HasColumnName("pack_version");
entity.Property(e => e.RiskProfileId).HasColumnName("risk_profile_id");
entity.Property(e => e.Status).HasConversion<string>().HasColumnName("status");
entity.Property(e => e.Result).HasConversion<string>().HasColumnName("result");
entity.Property(e => e.Status).HasConversion(new ValueConverter<EvaluationStatus, string>(v => v.ToString()!.ToLowerInvariant(), v => Enum.Parse<EvaluationStatus>(v, true))).HasColumnName("status");
entity.Property(e => e.Result).HasConversion(new ValueConverter<EvaluationResult, string>(v => v.ToString()!.ToLowerInvariant(), v => Enum.Parse<EvaluationResult>(v, true))).HasColumnName("result");
entity.Property(e => e.Score).HasColumnName("score");
entity.Property(e => e.FindingsCount).HasColumnName("findings_count");
entity.Property(e => e.CriticalCount).HasColumnName("critical_count");
@@ -215,7 +216,7 @@ public partial class PolicyDbContext : DbContext
entity.Property(e => e.EvaluationRunId).HasColumnName("evaluation_run_id");
entity.Property(e => e.RuleId).HasColumnName("rule_id");
entity.Property(e => e.RuleName).HasColumnName("rule_name");
entity.Property(e => e.Result).HasConversion<string>().HasColumnName("result");
entity.Property(e => e.Result).HasConversion(new ValueConverter<RuleResult, string>(v => v.ToString()!.ToLowerInvariant(), v => Enum.Parse<RuleResult>(v, true))).HasColumnName("result");
entity.Property(e => e.Severity).HasColumnName("severity");
entity.Property(e => e.Message).HasColumnName("message");
entity.Property(e => e.Details).HasColumnType("jsonb").HasColumnName("details");
@@ -376,7 +377,7 @@ public partial class PolicyDbContext : DbContext
entity.Property(e => e.ArtifactPattern).HasColumnName("artifact_pattern");
entity.Property(e => e.ProjectId).HasColumnName("project_id");
entity.Property(e => e.Reason).HasColumnName("reason");
entity.Property(e => e.Status).HasConversion<string>().HasColumnName("status");
entity.Property(e => e.Status).HasConversion(new ValueConverter<ExceptionStatus, string>(v => v.ToString()!.ToLowerInvariant(), v => Enum.Parse<ExceptionStatus>(v, true))).HasColumnName("status");
entity.Property(e => e.ExpiresAt).HasColumnName("expires_at");
entity.Property(e => e.ApprovedBy).HasColumnName("approved_by");
entity.Property(e => e.ApprovedAt).HasColumnName("approved_at");

View File

@@ -0,0 +1,13 @@
-- Policy Schema Migration 006: Add VEX trust columns to audit table
-- Sprint: DAL consolidation — EF Core entity-schema alignment
-- Description: Adds VEX trust scoring and issuer columns to the audit table
-- to match the PolicyAuditEntity model.
ALTER TABLE policy.audit ADD COLUMN IF NOT EXISTS vex_trust_score NUMERIC;
ALTER TABLE policy.audit ADD COLUMN IF NOT EXISTS vex_trust_tier TEXT;
ALTER TABLE policy.audit ADD COLUMN IF NOT EXISTS vex_signature_verified BOOLEAN;
ALTER TABLE policy.audit ADD COLUMN IF NOT EXISTS vex_issuer_id TEXT;
ALTER TABLE policy.audit ADD COLUMN IF NOT EXISTS vex_issuer_name TEXT;
ALTER TABLE policy.audit ADD COLUMN IF NOT EXISTS vex_trust_gate_result TEXT;
ALTER TABLE policy.audit ADD COLUMN IF NOT EXISTS vex_trust_gate_reason TEXT;
ALTER TABLE policy.audit ADD COLUMN IF NOT EXISTS vex_signature_method TEXT;

View File

@@ -21,7 +21,6 @@ internal static class PolicyDbContextFactory
var optionsBuilder = new DbContextOptionsBuilder<PolicyDbContext>()
.UseNpgsql(connection, npgsql => npgsql.CommandTimeout(commandTimeoutSeconds));
// Use the static compiled model only when schema matches the default.
if (string.Equals(normalizedSchema, PolicyDataSource.DefaultSchemaName, StringComparison.Ordinal))
{
optionsBuilder.UseModel(PolicyDbContextModel.Instance);

View File

@@ -13,12 +13,15 @@ namespace StellaOps.Policy.Persistence.Postgres.Repositories;
/// </summary>
public sealed class ConflictRepository : RepositoryBase<PolicyDataSource>, IConflictRepository
{
private readonly TimeProvider _timeProvider;
/// <summary>
/// Creates a new conflict repository.
/// </summary>
public ConflictRepository(PolicyDataSource dataSource, ILogger<ConflictRepository> logger)
public ConflictRepository(PolicyDataSource dataSource, ILogger<ConflictRepository> logger, TimeProvider? timeProvider = null)
: base(dataSource, logger)
{
_timeProvider = timeProvider ?? TimeProvider.System;
}
/// <inheritdoc />
@@ -118,13 +121,15 @@ public sealed class ConflictRepository : RepositoryBase<PolicyDataSource>, IConf
string resolvedBy,
CancellationToken cancellationToken = default)
{
// Keep raw SQL: conditional update WHERE status = 'open' with NOW()
// Keep raw SQL for conditional update WHERE status = 'open'
const string sql = """
UPDATE policy.conflicts
SET status = 'resolved', resolution = @resolution, resolved_by = @resolved_by, resolved_at = NOW()
SET status = 'resolved', resolution = @resolution, resolved_by = @resolved_by, resolved_at = @now
WHERE tenant_id = @tenant_id AND id = @id AND status = 'open'
""";
var now = _timeProvider.GetUtcNow();
var rows = await ExecuteAsync(
tenantId,
sql,
@@ -134,6 +139,7 @@ public sealed class ConflictRepository : RepositoryBase<PolicyDataSource>, IConf
AddParameter(cmd, "id", id);
AddParameter(cmd, "resolution", resolution);
AddParameter(cmd, "resolved_by", resolvedBy);
AddParameter(cmd, "now", now);
},
cancellationToken).ConfigureAwait(false);
@@ -147,13 +153,15 @@ public sealed class ConflictRepository : RepositoryBase<PolicyDataSource>, IConf
string dismissedBy,
CancellationToken cancellationToken = default)
{
// Keep raw SQL: conditional update WHERE status = 'open' with NOW()
// Keep raw SQL for conditional update WHERE status = 'open'
const string sql = """
UPDATE policy.conflicts
SET status = 'dismissed', resolved_by = @dismissed_by, resolved_at = NOW()
SET status = 'dismissed', resolved_by = @dismissed_by, resolved_at = @now
WHERE tenant_id = @tenant_id AND id = @id AND status = 'open'
""";
var now = _timeProvider.GetUtcNow();
var rows = await ExecuteAsync(
tenantId,
sql,
@@ -162,6 +170,7 @@ public sealed class ConflictRepository : RepositoryBase<PolicyDataSource>, IConf
AddParameter(cmd, "tenant_id", tenantId);
AddParameter(cmd, "id", id);
AddParameter(cmd, "dismissed_by", dismissedBy);
AddParameter(cmd, "now", now);
},
cancellationToken).ConfigureAwait(false);

View File

@@ -13,12 +13,15 @@ namespace StellaOps.Policy.Persistence.Postgres.Repositories;
/// </summary>
public sealed class EvaluationRunRepository : RepositoryBase<PolicyDataSource>, IEvaluationRunRepository
{
private readonly TimeProvider _timeProvider;
/// <summary>
/// Creates a new evaluation run repository.
/// </summary>
public EvaluationRunRepository(PolicyDataSource dataSource, ILogger<EvaluationRunRepository> logger)
public EvaluationRunRepository(PolicyDataSource dataSource, ILogger<EvaluationRunRepository> logger, TimeProvider? timeProvider = null)
: base(dataSource, logger)
{
_timeProvider = timeProvider ?? TimeProvider.System;
}
/// <inheritdoc />
@@ -131,14 +134,16 @@ public sealed class EvaluationRunRepository : RepositoryBase<PolicyDataSource>,
/// <inheritdoc />
public async Task<bool> MarkStartedAsync(string tenantId, Guid id, CancellationToken cancellationToken = default)
{
// Keep raw SQL: conditional status transition WHERE status = 'pending' with NOW()
// Keep raw SQL for conditional status transition WHERE status = 'pending'
const string sql = """
UPDATE policy.evaluation_runs
SET status = 'running',
started_at = NOW()
started_at = @now
WHERE tenant_id = @tenant_id AND id = @id AND status = 'pending'
""";
var now = _timeProvider.GetUtcNow();
var rows = await ExecuteAsync(
tenantId,
sql,
@@ -146,6 +151,7 @@ public sealed class EvaluationRunRepository : RepositoryBase<PolicyDataSource>,
{
AddParameter(cmd, "tenant_id", tenantId);
AddParameter(cmd, "id", id);
AddParameter(cmd, "now", now);
},
cancellationToken).ConfigureAwait(false);
@@ -166,7 +172,7 @@ public sealed class EvaluationRunRepository : RepositoryBase<PolicyDataSource>,
int durationMs,
CancellationToken cancellationToken = default)
{
// Keep raw SQL: conditional status transition WHERE status = 'running' with NOW() and multi-column update
// Keep raw SQL for conditional status transition WHERE status = 'running' and multi-column update
const string sql = """
UPDATE policy.evaluation_runs
SET status = 'completed',
@@ -178,10 +184,12 @@ public sealed class EvaluationRunRepository : RepositoryBase<PolicyDataSource>,
medium_count = @medium_count,
low_count = @low_count,
duration_ms = @duration_ms,
completed_at = NOW()
completed_at = @now
WHERE tenant_id = @tenant_id AND id = @id AND status = 'running'
""";
var now = _timeProvider.GetUtcNow();
var rows = await ExecuteAsync(
tenantId,
sql,
@@ -197,6 +205,7 @@ public sealed class EvaluationRunRepository : RepositoryBase<PolicyDataSource>,
AddParameter(cmd, "medium_count", mediumCount);
AddParameter(cmd, "low_count", lowCount);
AddParameter(cmd, "duration_ms", durationMs);
AddParameter(cmd, "now", now);
},
cancellationToken).ConfigureAwait(false);
@@ -210,16 +219,18 @@ public sealed class EvaluationRunRepository : RepositoryBase<PolicyDataSource>,
string errorMessage,
CancellationToken cancellationToken = default)
{
// Keep raw SQL: conditional status transition WHERE status IN ('pending', 'running')
// Keep raw SQL for conditional status transition WHERE status IN ('pending', 'running')
const string sql = """
UPDATE policy.evaluation_runs
SET status = 'failed',
result = 'error',
error_message = @error_message,
completed_at = NOW()
completed_at = @now
WHERE tenant_id = @tenant_id AND id = @id AND status IN ('pending', 'running')
""";
var now = _timeProvider.GetUtcNow();
var rows = await ExecuteAsync(
tenantId,
sql,
@@ -228,6 +239,7 @@ public sealed class EvaluationRunRepository : RepositoryBase<PolicyDataSource>,
AddParameter(cmd, "tenant_id", tenantId);
AddParameter(cmd, "id", id);
AddParameter(cmd, "error_message", errorMessage);
AddParameter(cmd, "now", now);
},
cancellationToken).ConfigureAwait(false);

View File

@@ -13,12 +13,15 @@ namespace StellaOps.Policy.Persistence.Postgres.Repositories;
/// </summary>
public sealed class ExceptionRepository : RepositoryBase<PolicyDataSource>, IExceptionRepository
{
private readonly TimeProvider _timeProvider;
/// <summary>
/// Creates a new exception repository.
/// </summary>
public ExceptionRepository(PolicyDataSource dataSource, ILogger<ExceptionRepository> logger)
public ExceptionRepository(PolicyDataSource dataSource, ILogger<ExceptionRepository> logger, TimeProvider? timeProvider = null)
: base(dataSource, logger)
{
_timeProvider = timeProvider ?? TimeProvider.System;
}
/// <inheritdoc />
@@ -114,11 +117,13 @@ public sealed class ExceptionRepository : RepositoryBase<PolicyDataSource>, IExc
SELECT * FROM policy.exceptions
WHERE tenant_id = @tenant_id
AND status = 'active'
AND (expires_at IS NULL OR expires_at > NOW())
AND (expires_at IS NULL OR expires_at > @now)
AND (project_id IS NULL OR project_id = @project_id)
ORDER BY name, id
""";
var now = _timeProvider.GetUtcNow();
return await QueryAsync(
tenantId,
sql,
@@ -126,6 +131,7 @@ public sealed class ExceptionRepository : RepositoryBase<PolicyDataSource>, IExc
{
AddParameter(cmd, "tenant_id", tenantId);
AddParameter(cmd, "project_id", projectId);
AddParameter(cmd, "now", now);
},
MapException,
cancellationToken).ConfigureAwait(false);
@@ -141,11 +147,13 @@ public sealed class ExceptionRepository : RepositoryBase<PolicyDataSource>, IExc
SELECT * FROM policy.exceptions
WHERE tenant_id = @tenant_id
AND status = 'active'
AND (expires_at IS NULL OR expires_at > NOW())
AND (expires_at IS NULL OR expires_at > @now)
AND (rule_pattern IS NULL OR @rule_name ~ rule_pattern)
ORDER BY name, id
""";
var now = _timeProvider.GetUtcNow();
return await QueryAsync(
tenantId,
sql,
@@ -153,6 +161,7 @@ public sealed class ExceptionRepository : RepositoryBase<PolicyDataSource>, IExc
{
AddParameter(cmd, "tenant_id", tenantId);
AddParameter(cmd, "rule_name", ruleName);
AddParameter(cmd, "now", now);
},
MapException,
cancellationToken).ConfigureAwait(false);
@@ -203,10 +212,12 @@ public sealed class ExceptionRepository : RepositoryBase<PolicyDataSource>, IExc
const string sql = """
UPDATE policy.exceptions
SET approved_by = @approved_by,
approved_at = NOW()
approved_at = @now
WHERE tenant_id = @tenant_id AND id = @id AND status = 'active'
""";
var now = _timeProvider.GetUtcNow();
var rows = await ExecuteAsync(
tenantId,
sql,
@@ -215,6 +226,7 @@ public sealed class ExceptionRepository : RepositoryBase<PolicyDataSource>, IExc
AddParameter(cmd, "tenant_id", tenantId);
AddParameter(cmd, "id", id);
AddParameter(cmd, "approved_by", approvedBy);
AddParameter(cmd, "now", now);
},
cancellationToken).ConfigureAwait(false);
@@ -228,10 +240,12 @@ public sealed class ExceptionRepository : RepositoryBase<PolicyDataSource>, IExc
UPDATE policy.exceptions
SET status = 'revoked',
revoked_by = @revoked_by,
revoked_at = NOW()
revoked_at = @now
WHERE tenant_id = @tenant_id AND id = @id AND status = 'active'
""";
var now = _timeProvider.GetUtcNow();
var rows = await ExecuteAsync(
tenantId,
sql,
@@ -240,6 +254,7 @@ public sealed class ExceptionRepository : RepositoryBase<PolicyDataSource>, IExc
AddParameter(cmd, "tenant_id", tenantId);
AddParameter(cmd, "id", id);
AddParameter(cmd, "revoked_by", revokedBy);
AddParameter(cmd, "now", now);
},
cancellationToken).ConfigureAwait(false);
@@ -255,13 +270,19 @@ public sealed class ExceptionRepository : RepositoryBase<PolicyDataSource>, IExc
WHERE tenant_id = @tenant_id
AND status = 'active'
AND expires_at IS NOT NULL
AND expires_at <= NOW()
AND expires_at <= @now
""";
var now = _timeProvider.GetUtcNow();
return await ExecuteAsync(
tenantId,
sql,
cmd => AddParameter(cmd, "tenant_id", tenantId),
cmd =>
{
AddParameter(cmd, "tenant_id", tenantId);
AddParameter(cmd, "now", now);
},
cancellationToken).ConfigureAwait(false);
}

View File

@@ -13,12 +13,15 @@ namespace StellaOps.Policy.Persistence.Postgres.Repositories;
/// </summary>
public sealed class LedgerExportRepository : RepositoryBase<PolicyDataSource>, ILedgerExportRepository
{
private readonly TimeProvider _timeProvider;
/// <summary>
/// Creates a new ledger export repository.
/// </summary>
public LedgerExportRepository(PolicyDataSource dataSource, ILogger<LedgerExportRepository> logger)
public LedgerExportRepository(PolicyDataSource dataSource, ILogger<LedgerExportRepository> logger, TimeProvider? timeProvider = null)
: base(dataSource, logger)
{
_timeProvider = timeProvider ?? TimeProvider.System;
}
/// <inheritdoc />
@@ -94,14 +97,16 @@ public sealed class LedgerExportRepository : RepositoryBase<PolicyDataSource>, I
string? errorMessage = null,
CancellationToken cancellationToken = default)
{
// Keep raw SQL: CASE conditional update for start_time cannot be expressed in EF Core
// Keep raw SQL for CASE conditional update for start_time
const string sql = """
UPDATE policy.ledger_exports
SET status = @status, error_message = @error_message,
start_time = CASE WHEN @status = 'running' AND start_time IS NULL THEN NOW() ELSE start_time END
start_time = CASE WHEN @status = 'running' AND start_time IS NULL THEN @now ELSE start_time END
WHERE tenant_id = @tenant_id AND id = @id
""";
var now = _timeProvider.GetUtcNow();
var rows = await ExecuteAsync(
tenantId,
sql,
@@ -111,6 +116,7 @@ public sealed class LedgerExportRepository : RepositoryBase<PolicyDataSource>, I
AddParameter(cmd, "id", id);
AddParameter(cmd, "status", status);
AddParameter(cmd, "error_message", errorMessage as object ?? DBNull.Value);
AddParameter(cmd, "now", now);
},
cancellationToken).ConfigureAwait(false);
@@ -127,7 +133,7 @@ public sealed class LedgerExportRepository : RepositoryBase<PolicyDataSource>, I
string? storagePath,
CancellationToken cancellationToken = default)
{
// Keep raw SQL: multi-column update with NOW()
// Keep raw SQL for multi-column update
const string sql = """
UPDATE policy.ledger_exports
SET status = 'completed',
@@ -135,10 +141,12 @@ public sealed class LedgerExportRepository : RepositoryBase<PolicyDataSource>, I
record_count = @record_count,
byte_size = @byte_size,
storage_path = @storage_path,
end_time = NOW()
end_time = @now
WHERE tenant_id = @tenant_id AND id = @id
""";
var now = _timeProvider.GetUtcNow();
var rows = await ExecuteAsync(
tenantId,
sql,
@@ -150,6 +158,7 @@ public sealed class LedgerExportRepository : RepositoryBase<PolicyDataSource>, I
AddParameter(cmd, "record_count", recordCount);
AddParameter(cmd, "byte_size", byteSize);
AddParameter(cmd, "storage_path", storagePath as object ?? DBNull.Value);
AddParameter(cmd, "now", now);
},
cancellationToken).ConfigureAwait(false);

View File

@@ -13,12 +13,15 @@ namespace StellaOps.Policy.Persistence.Postgres.Repositories;
/// </summary>
public sealed class PackVersionRepository : RepositoryBase<PolicyDataSource>, IPackVersionRepository
{
private readonly TimeProvider _timeProvider;
/// <summary>
/// Creates a new pack version repository.
/// </summary>
public PackVersionRepository(PolicyDataSource dataSource, ILogger<PackVersionRepository> logger)
public PackVersionRepository(PolicyDataSource dataSource, ILogger<PackVersionRepository> logger, TimeProvider? timeProvider = null)
: base(dataSource, logger)
{
_timeProvider = timeProvider ?? TimeProvider.System;
}
/// <inheritdoc />
@@ -104,21 +107,24 @@ public sealed class PackVersionRepository : RepositoryBase<PolicyDataSource>, IP
/// <inheritdoc />
public async Task<bool> PublishAsync(Guid id, string? publishedBy, CancellationToken cancellationToken = default)
{
// Keep raw SQL: conditional update WHERE is_published = FALSE with NOW()
// Keep raw SQL for conditional update WHERE is_published = FALSE
const string sql = """
UPDATE policy.pack_versions
SET is_published = TRUE,
published_at = NOW(),
published_at = @now,
published_by = @published_by
WHERE id = @id AND is_published = FALSE
""";
var now = _timeProvider.GetUtcNow();
await using var connection = await DataSource.OpenSystemConnectionAsync(cancellationToken)
.ConfigureAwait(false);
await using var command = CreateCommand(sql, connection);
AddParameter(command, "id", id);
AddParameter(command, "published_by", publishedBy);
AddParameter(command, "now", now);
var rows = await command.ExecuteNonQueryAsync(cancellationToken).ConfigureAwait(false);
return rows > 0;

View File

@@ -18,12 +18,15 @@ namespace StellaOps.Policy.Persistence.Postgres.Repositories;
/// </summary>
public sealed class PostgresBudgetStore : RepositoryBase<PolicyDataSource>, IBudgetStore
{
private readonly TimeProvider _timeProvider;
/// <summary>
/// Creates a new PostgreSQL budget store.
/// </summary>
public PostgresBudgetStore(PolicyDataSource dataSource, ILogger<PostgresBudgetStore> logger)
public PostgresBudgetStore(PolicyDataSource dataSource, ILogger<PostgresBudgetStore> logger, TimeProvider? timeProvider = null)
: base(dataSource, logger)
{
_timeProvider = timeProvider ?? TimeProvider.System;
}
/// <inheritdoc />
@@ -276,8 +279,8 @@ public sealed class PostgresBudgetStore : RepositoryBase<PolicyDataSource>, IBud
allocated, -- Same allocation as previous window
0, -- Reset consumed to 0
'green', -- Reset status to green
NOW(),
NOW()
@now,
@now
FROM policy.budget_ledger
WHERE window = (
SELECT MAX(window) FROM policy.budget_ledger WHERE window < @new_window
@@ -285,10 +288,16 @@ public sealed class PostgresBudgetStore : RepositoryBase<PolicyDataSource>, IBud
ON CONFLICT (service_id, window) DO NOTHING
""";
var now = _timeProvider.GetUtcNow();
return await ExecuteAsync(
null!,
sql,
cmd => AddParameter(cmd, "new_window", newWindow),
cmd =>
{
AddParameter(cmd, "new_window", newWindow);
AddParameter(cmd, "now", now);
},
ct).ConfigureAwait(false);
}

View File

@@ -321,10 +321,12 @@ public sealed class PostgresExceptionObjectRepository : RepositoryBase<PolicyDat
? $"AND ({string.Join(" AND ", conditions)})"
: "";
var now = _timeProvider.GetUtcNow();
var sql = $"""
SELECT * FROM policy.exceptions
WHERE status = 'active'
AND expires_at > NOW()
AND expires_at > @now
{scopeCondition}
ORDER BY created_at DESC, exception_id
""";
@@ -338,6 +340,7 @@ public sealed class PostgresExceptionObjectRepository : RepositoryBase<PolicyDat
{
AddParameter(cmd, name, value);
}
AddParameter(cmd, "now", now);
},
MapException,
cancellationToken).ConfigureAwait(false);
@@ -351,15 +354,21 @@ public sealed class PostgresExceptionObjectRepository : RepositoryBase<PolicyDat
const string sql = """
SELECT * FROM policy.exceptions
WHERE status = 'active'
AND expires_at > NOW()
AND expires_at <= NOW() + @horizon
AND expires_at > @now
AND expires_at <= @now + @horizon
ORDER BY expires_at ASC, exception_id
""";
var now = _timeProvider.GetUtcNow();
return await QueryAsync(
"default",
sql,
cmd => AddParameter(cmd, "horizon", horizon),
cmd =>
{
AddParameter(cmd, "now", now);
AddParameter(cmd, "horizon", horizon);
},
MapException,
cancellationToken).ConfigureAwait(false);
}
@@ -371,14 +380,16 @@ public sealed class PostgresExceptionObjectRepository : RepositoryBase<PolicyDat
const string sql = """
SELECT * FROM policy.exceptions
WHERE status = 'active'
AND expires_at <= NOW()
AND expires_at <= @now
ORDER BY expires_at ASC, exception_id
""";
var now = _timeProvider.GetUtcNow();
return await QueryAsync(
"default",
sql,
null,
cmd => AddParameter(cmd, "now", now),
MapException,
cancellationToken).ConfigureAwait(false);
}
@@ -425,15 +436,18 @@ public sealed class PostgresExceptionObjectRepository : RepositoryBase<PolicyDat
COUNT(*) FILTER (WHERE status = 'active') AS active,
COUNT(*) FILTER (WHERE status = 'expired') AS expired,
COUNT(*) FILTER (WHERE status = 'revoked') AS revoked,
COUNT(*) FILTER (WHERE status = 'active' AND expires_at <= NOW() + INTERVAL '7 days') AS expiring_soon
COUNT(*) FILTER (WHERE status = 'active' AND expires_at <= @now + INTERVAL '7 days') AS expiring_soon
FROM policy.exceptions
{tenantCondition}
""";
var now = _timeProvider.GetUtcNow();
await using var connection = await DataSource.OpenConnectionAsync(
tenantId?.ToString() ?? "default", "reader", cancellationToken).ConfigureAwait(false);
await using var command = CreateCommand(sql, connection);
AddParameter(command, "now", now);
if (tenantId.HasValue)
{
AddParameter(command, "tenant_id", tenantId.Value);

View File

@@ -23,8 +23,13 @@ namespace StellaOps.Policy.Persistence.Postgres.Repositories;
/// </summary>
public sealed class TrustedKeyRepository : RepositoryBase<PolicyDataSource>, ITrustedKeyRepository
{
public TrustedKeyRepository(PolicyDataSource dataSource, ILogger<TrustedKeyRepository> logger)
: base(dataSource, logger) { }
private readonly TimeProvider _timeProvider;
public TrustedKeyRepository(PolicyDataSource dataSource, ILogger<TrustedKeyRepository> logger, TimeProvider? timeProvider = null)
: base(dataSource, logger)
{
_timeProvider = timeProvider ?? TimeProvider.System;
}
/// <inheritdoc />
public async Task<TrustedKeyEntity?> GetByKeyIdAsync(
@@ -73,16 +78,19 @@ public sealed class TrustedKeyRepository : RepositoryBase<PolicyDataSource>, ITr
WHERE tenant_id = @tenant_id
AND is_active = true
AND revoked_at IS NULL
AND (valid_until IS NULL OR valid_until > NOW())
AND (valid_until IS NULL OR valid_until > @now)
AND issuer_pattern IS NOT NULL
AND @issuer LIKE REPLACE(REPLACE(issuer_pattern, '*', '%'), '?', '_')
ORDER BY valid_from DESC
""";
var now = _timeProvider.GetUtcNow();
return await QueryAsync(tenantId, sql, cmd =>
{
AddParameter(cmd, "tenant_id", tenantId);
AddParameter(cmd, "issuer", issuer);
AddParameter(cmd, "now", now);
}, MapEntity, cancellationToken).ConfigureAwait(false);
}
@@ -93,7 +101,7 @@ public sealed class TrustedKeyRepository : RepositoryBase<PolicyDataSource>, ITr
int offset = 0,
CancellationToken cancellationToken = default)
{
// Keep raw SQL: OR valid_until > NOW() with NULL check cannot be cleanly translated by EF Core
// Keep raw SQL: OR valid_until > @now with NULL check cannot be cleanly translated by EF Core
const string sql = """
SELECT id, tenant_id, key_id, fingerprint, algorithm, public_key_pem, owner,
issuer_pattern, purposes, valid_from, valid_until, is_active,
@@ -102,16 +110,19 @@ public sealed class TrustedKeyRepository : RepositoryBase<PolicyDataSource>, ITr
WHERE tenant_id = @tenant_id
AND is_active = true
AND revoked_at IS NULL
AND (valid_until IS NULL OR valid_until > NOW())
AND (valid_until IS NULL OR valid_until > @now)
ORDER BY created_at DESC
LIMIT @limit OFFSET @offset
""";
var now = _timeProvider.GetUtcNow();
return await QueryAsync(tenantId, sql, cmd =>
{
AddParameter(cmd, "tenant_id", tenantId);
AddParameter(cmd, "limit", limit);
AddParameter(cmd, "offset", offset);
AddParameter(cmd, "now", now);
}, MapEntity, cancellationToken).ConfigureAwait(false);
}
@@ -130,15 +141,18 @@ public sealed class TrustedKeyRepository : RepositoryBase<PolicyDataSource>, ITr
WHERE tenant_id = @tenant_id
AND is_active = true
AND revoked_at IS NULL
AND (valid_until IS NULL OR valid_until > NOW())
AND (valid_until IS NULL OR valid_until > @now)
AND purposes @> @purpose::jsonb
ORDER BY created_at DESC
""";
var now = _timeProvider.GetUtcNow();
return await QueryAsync(tenantId, sql, cmd =>
{
AddParameter(cmd, "tenant_id", tenantId);
AddJsonbParameter(cmd, "purpose", JsonSerializer.Serialize(new[] { purpose }));
AddParameter(cmd, "now", now);
}, MapEntity, cancellationToken).ConfigureAwait(false);
}
@@ -162,7 +176,7 @@ public sealed class TrustedKeyRepository : RepositoryBase<PolicyDataSource>, ITr
TrustedKeyEntity key,
CancellationToken cancellationToken = default)
{
// Keep raw SQL: targeted column update with NOW() for updated_at
// Keep raw SQL for targeted column update
const string sql = """
UPDATE policy.trusted_keys
SET public_key_pem = @public_key_pem,
@@ -172,10 +186,12 @@ public sealed class TrustedKeyRepository : RepositoryBase<PolicyDataSource>, ITr
valid_until = @valid_until,
is_active = @is_active,
metadata = @metadata::jsonb,
updated_at = NOW()
updated_at = @now
WHERE tenant_id = @tenant_id AND key_id = @key_id
""";
var now = _timeProvider.GetUtcNow();
await using var connection = await DataSource.OpenConnectionAsync(key.TenantId, "writer", cancellationToken)
.ConfigureAwait(false);
await using var command = CreateCommand(sql, connection);
@@ -189,6 +205,7 @@ public sealed class TrustedKeyRepository : RepositoryBase<PolicyDataSource>, ITr
AddParameter(command, "valid_until", key.ValidUntil);
AddParameter(command, "is_active", key.IsActive);
AddJsonbParameter(command, "metadata", key.Metadata);
AddParameter(command, "now", now);
var rowsAffected = await command.ExecuteNonQueryAsync(cancellationToken).ConfigureAwait(false);
return rowsAffected > 0;
@@ -201,16 +218,18 @@ public sealed class TrustedKeyRepository : RepositoryBase<PolicyDataSource>, ITr
string reason,
CancellationToken cancellationToken = default)
{
// Keep raw SQL: conditional update WHERE revoked_at IS NULL with NOW()
// Keep raw SQL for conditional update WHERE revoked_at IS NULL
const string sql = """
UPDATE policy.trusted_keys
SET is_active = false,
revoked_at = NOW(),
revoked_at = @now,
revoked_reason = @reason,
updated_at = NOW()
updated_at = @now
WHERE tenant_id = @tenant_id AND key_id = @key_id AND revoked_at IS NULL
""";
var now = _timeProvider.GetUtcNow();
await using var connection = await DataSource.OpenConnectionAsync(tenantId, "writer", cancellationToken)
.ConfigureAwait(false);
await using var command = CreateCommand(sql, connection);
@@ -218,6 +237,7 @@ public sealed class TrustedKeyRepository : RepositoryBase<PolicyDataSource>, ITr
AddParameter(command, "tenant_id", tenantId);
AddParameter(command, "key_id", keyId);
AddParameter(command, "reason", reason);
AddParameter(command, "now", now);
var rowsAffected = await command.ExecuteNonQueryAsync(cancellationToken).ConfigureAwait(false);
return rowsAffected > 0;
@@ -246,21 +266,24 @@ public sealed class TrustedKeyRepository : RepositoryBase<PolicyDataSource>, ITr
string tenantId,
CancellationToken cancellationToken = default)
{
// Keep raw SQL: OR valid_until > NOW() with NULL check
// Keep raw SQL: OR valid_until > @now with NULL check
const string sql = """
SELECT COUNT(*)
FROM policy.trusted_keys
WHERE tenant_id = @tenant_id
AND is_active = true
AND revoked_at IS NULL
AND (valid_until IS NULL OR valid_until > NOW())
AND (valid_until IS NULL OR valid_until > @now)
""";
var now = _timeProvider.GetUtcNow();
await using var connection = await DataSource.OpenConnectionAsync(tenantId, "reader", cancellationToken)
.ConfigureAwait(false);
await using var command = CreateCommand(sql, connection);
AddParameter(command, "tenant_id", tenantId);
AddParameter(command, "now", now);
var result = await command.ExecuteScalarAsync(cancellationToken).ConfigureAwait(false);
return Convert.ToInt32(result);

View File

@@ -13,12 +13,15 @@ namespace StellaOps.Policy.Persistence.Postgres.Repositories;
/// </summary>
public sealed class WorkerResultRepository : RepositoryBase<PolicyDataSource>, IWorkerResultRepository
{
private readonly TimeProvider _timeProvider;
/// <summary>
/// Creates a new worker result repository.
/// </summary>
public WorkerResultRepository(PolicyDataSource dataSource, ILogger<WorkerResultRepository> logger)
public WorkerResultRepository(PolicyDataSource dataSource, ILogger<WorkerResultRepository> logger, TimeProvider? timeProvider = null)
: base(dataSource, logger)
{
_timeProvider = timeProvider ?? TimeProvider.System;
}
/// <inheritdoc />
@@ -131,14 +134,16 @@ public sealed class WorkerResultRepository : RepositoryBase<PolicyDataSource>, I
string? errorMessage = null,
CancellationToken cancellationToken = default)
{
// Keep raw SQL: CASE conditional update for started_at
// Keep raw SQL for CASE conditional update for started_at
const string sql = """
UPDATE policy.worker_results
SET status = @status, progress = @progress, error_message = @error_message,
started_at = CASE WHEN @status = 'running' AND started_at IS NULL THEN NOW() ELSE started_at END
started_at = CASE WHEN @status = 'running' AND started_at IS NULL THEN @now ELSE started_at END
WHERE tenant_id = @tenant_id AND id = @id
""";
var now = _timeProvider.GetUtcNow();
var rows = await ExecuteAsync(
tenantId,
sql,
@@ -149,6 +154,7 @@ public sealed class WorkerResultRepository : RepositoryBase<PolicyDataSource>, I
AddParameter(cmd, "status", status);
AddParameter(cmd, "progress", progress);
AddParameter(cmd, "error_message", errorMessage as object ?? DBNull.Value);
AddParameter(cmd, "now", now);
},
cancellationToken).ConfigureAwait(false);
@@ -163,14 +169,16 @@ public sealed class WorkerResultRepository : RepositoryBase<PolicyDataSource>, I
string? outputHash = null,
CancellationToken cancellationToken = default)
{
// Keep raw SQL: multi-column update with NOW() and jsonb cast
// Keep raw SQL for multi-column update with jsonb cast
const string sql = """
UPDATE policy.worker_results
SET status = 'completed', progress = 100, result = @result::jsonb,
output_hash = @output_hash, completed_at = NOW()
output_hash = @output_hash, completed_at = @now
WHERE tenant_id = @tenant_id AND id = @id
""";
var now = _timeProvider.GetUtcNow();
var rows = await ExecuteAsync(
tenantId,
sql,
@@ -180,6 +188,7 @@ public sealed class WorkerResultRepository : RepositoryBase<PolicyDataSource>, I
AddParameter(cmd, "id", id);
AddParameter(cmd, "result", result);
AddParameter(cmd, "output_hash", outputHash as object ?? DBNull.Value);
AddParameter(cmd, "now", now);
},
cancellationToken).ConfigureAwait(false);
@@ -193,13 +202,15 @@ public sealed class WorkerResultRepository : RepositoryBase<PolicyDataSource>, I
string errorMessage,
CancellationToken cancellationToken = default)
{
// Keep raw SQL: conditional update with NOW()
// Keep raw SQL for status update
const string sql = """
UPDATE policy.worker_results
SET status = 'failed', error_message = @error_message, completed_at = NOW()
SET status = 'failed', error_message = @error_message, completed_at = @now
WHERE tenant_id = @tenant_id AND id = @id
""";
var now = _timeProvider.GetUtcNow();
var rows = await ExecuteAsync(
tenantId,
sql,
@@ -208,6 +219,7 @@ public sealed class WorkerResultRepository : RepositoryBase<PolicyDataSource>, I
AddParameter(cmd, "tenant_id", tenantId);
AddParameter(cmd, "id", id);
AddParameter(cmd, "error_message", errorMessage);
AddParameter(cmd, "now", now);
},
cancellationToken).ConfigureAwait(false);

View File

@@ -14,6 +14,7 @@
<ItemGroup>
<EmbeddedResource Include="Migrations\**\*.sql" LogicalName="%(RecursiveDir)%(Filename)%(Extension)" />
<EmbeddedResource Remove="Migrations\_archived\**\*.sql" />
</ItemGroup>
<ItemGroup>

View File

@@ -0,0 +1,78 @@
using FluentAssertions;
using Microsoft.EntityFrameworkCore;
using StellaOps.Policy.Persistence.EfCore.CompiledModels;
using StellaOps.Policy.Persistence.Postgres.Models;
using StellaOps.TestKit;
using Xunit;
namespace StellaOps.Policy.Persistence.Tests;
/// <summary>
/// Guard tests ensuring the EF Core compiled model is real (not a stub)
/// and contains all expected entity type registrations.
/// </summary>
public sealed class CompiledModelGuardTests
{
[Trait("Category", TestCategories.Unit)]
[Fact]
public void CompiledModel_Instance_IsNotNull()
{
PolicyDbContextModel.Instance.Should().NotBeNull(
"compiled model must be generated via 'dotnet ef dbcontext optimize', not a stub");
}
[Trait("Category", TestCategories.Unit)]
[Fact]
public void CompiledModel_HasExpectedEntityTypeCount()
{
var entityTypes = PolicyDbContextModel.Instance.GetEntityTypes().ToList();
entityTypes.Should().HaveCount(24,
"policy compiled model must contain exactly 24 entity types (regenerate with 'dotnet ef dbcontext optimize' if count differs)");
}
[Trait("Category", TestCategories.Unit)]
[Theory]
[InlineData(typeof(PackEntity))]
[InlineData(typeof(PackVersionEntity))]
[InlineData(typeof(RuleEntity))]
[InlineData(typeof(RiskProfileEntity))]
[InlineData(typeof(EvaluationRunEntity))]
[InlineData(typeof(ExplanationEntity))]
[InlineData(typeof(SnapshotEntity))]
[InlineData(typeof(ViolationEventEntity))]
[InlineData(typeof(ConflictEntity))]
[InlineData(typeof(LedgerExportEntity))]
[InlineData(typeof(WorkerResultEntity))]
[InlineData(typeof(ExceptionEntity))]
[InlineData(typeof(BudgetLedgerEntity))]
[InlineData(typeof(BudgetEntryEntity))]
[InlineData(typeof(ExceptionApprovalRequestEntity))]
[InlineData(typeof(ExceptionApprovalAuditEntity))]
[InlineData(typeof(ExceptionApprovalRuleEntity))]
[InlineData(typeof(PolicyAuditEntity))]
[InlineData(typeof(TrustedKeyEntity))]
[InlineData(typeof(GateBypassAuditEntity))]
[InlineData(typeof(GateDecisionEntity))]
[InlineData(typeof(ReplayAuditEntity))]
[InlineData(typeof(AdvisorySourceImpactEntity))]
[InlineData(typeof(AdvisorySourceConflictEntity))]
public void CompiledModel_ContainsEntityType(Type entityType)
{
var found = PolicyDbContextModel.Instance.FindEntityType(entityType);
found.Should().NotBeNull(
$"compiled model must contain entity type '{entityType.Name}' — regenerate if missing");
}
[Trait("Category", TestCategories.Unit)]
[Fact]
public void CompiledModel_EntityTypes_HaveTableNames()
{
var entityTypes = PolicyDbContextModel.Instance.GetEntityTypes();
foreach (var entityType in entityTypes)
{
var tableName = entityType.GetTableName();
tableName.Should().NotBeNullOrWhiteSpace(
$"entity type '{entityType.ClrType.Name}' must have a table name configured");
}
}
}

View File

@@ -303,7 +303,8 @@ public sealed class PolicyMigrationTests : IAsyncLifetime
{
var assembly = typeof(PolicyDataSource).Assembly;
var resourceNames = assembly.GetManifestResourceNames()
.Where(n => n.Contains("Migrations") && n.EndsWith(".sql"))
.Where(n => n.EndsWith(".sql", StringComparison.OrdinalIgnoreCase)
&& !n.Contains("_archived", StringComparison.OrdinalIgnoreCase))
.OrderBy(n => n);
return resourceNames;

View File

@@ -6,6 +6,7 @@
// -----------------------------------------------------------------------------
using System.Reflection;
using Microsoft.Extensions.Logging;
using StellaOps.Infrastructure.Postgres.Testing;
using StellaOps.Policy.Persistence;
using StellaOps.Policy.Persistence.Postgres;
@@ -27,6 +28,15 @@ public sealed class PolicyPostgresFixture : PostgresIntegrationFixture, ICollect
=> typeof(PolicyDataSource).Assembly;
protected override string GetModuleName() => "Policy";
/// <summary>
/// Policy migration SQL hardcodes the <c>policy.</c> schema prefix on all DDL
/// and the repositories also use <c>policy.</c> in raw SQL. Use the canonical
/// schema name so search_path, EF Core, and raw SQL all agree.
/// </summary>
protected override PostgresFixture CreateFixtureInstance(
string connectionString, string moduleName, ILogger logger)
=> new PostgresFixture(connectionString, "policy", logger);
}
/// <summary>

View File

@@ -0,0 +1,296 @@
using FluentAssertions;
using Microsoft.Extensions.Logging.Abstractions;
using Microsoft.Extensions.Options;
using StellaOps.Policy.Persistence.Postgres;
using StellaOps.Policy.Persistence.Postgres.Models;
using StellaOps.Policy.Persistence.Postgres.Repositories;
using StellaOps.TestKit;
using Xunit;
namespace StellaOps.Policy.Persistence.Tests;
/// <summary>
/// Verifies that repositories correctly use the injected <see cref="TimeProvider"/>
/// instead of SQL NOW() for timestamp columns. Each test injects a
/// <see cref="FixedTimeProvider"/> set to a distinctive past date and asserts
/// that persisted timestamps match the fixed time, not wall-clock time.
/// </summary>
[Collection(PolicyPostgresCollection.Name)]
public sealed class TimeProviderIntegrationTests : IAsyncLifetime
{
/// <summary>
/// A distinctive past date that could never be confused with wall-clock time.
/// </summary>
private static readonly DateTimeOffset FixedTime =
new(2020, 6, 15, 12, 0, 0, TimeSpan.Zero);
private readonly PolicyPostgresFixture _fixture;
private readonly PolicyDataSource _dataSource;
private readonly FixedTimeProvider _fixedTimeProvider;
// Repositories under test (using fixed time)
private readonly EvaluationRunRepository _evalRunRepo;
private readonly ConflictRepository _conflictRepo;
// Seed repositories (using system time -- only needed for FK seeding)
private readonly PackRepository _packRepo;
private readonly PackVersionRepository _packVersionRepo;
private readonly string _tenantId = Guid.NewGuid().ToString();
private readonly Guid _packId = Guid.NewGuid();
private const int SeedPackVersion = 1;
public TimeProviderIntegrationTests(PolicyPostgresFixture fixture)
{
_fixture = fixture;
_fixedTimeProvider = new FixedTimeProvider(FixedTime);
var options = fixture.Fixture.CreateOptions();
options.SchemaName = fixture.SchemaName;
_dataSource = new PolicyDataSource(Options.Create(options), NullLogger<PolicyDataSource>.Instance);
// Repositories that use the fixed time provider
_evalRunRepo = new EvaluationRunRepository(_dataSource, NullLogger<EvaluationRunRepository>.Instance, _fixedTimeProvider);
_conflictRepo = new ConflictRepository(_dataSource, NullLogger<ConflictRepository>.Instance, _fixedTimeProvider);
// Seed repositories -- use default (system) time; their timestamps are not under test
_packRepo = new PackRepository(_dataSource, NullLogger<PackRepository>.Instance);
_packVersionRepo = new PackVersionRepository(_dataSource, NullLogger<PackVersionRepository>.Instance);
}
public async ValueTask InitializeAsync()
{
await _fixture.TruncateAllTablesAsync();
// Seed a pack and pack version (required FK for evaluation runs)
var pack = new PackEntity
{
Id = _packId,
TenantId = _tenantId,
Name = "tp-pack",
DisplayName = "TimeProvider Test Pack",
ActiveVersion = SeedPackVersion,
CreatedAt = DateTimeOffset.UtcNow,
UpdatedAt = DateTimeOffset.UtcNow,
CreatedBy = "tests"
};
await _packRepo.CreateAsync(pack);
var packVersion = new PackVersionEntity
{
Id = Guid.NewGuid(),
PackId = _packId,
Version = SeedPackVersion,
RulesHash = "seed-hash",
IsPublished = true,
PublishedAt = DateTimeOffset.UtcNow,
PublishedBy = "tests",
CreatedBy = "tests"
};
await _packVersionRepo.CreateAsync(packVersion);
}
public ValueTask DisposeAsync() => ValueTask.CompletedTask;
// -----------------------------------------------------------------------
// EvaluationRunRepository -- MarkStartedAsync sets started_at via TimeProvider
// -----------------------------------------------------------------------
[Trait("Category", TestCategories.Unit)]
[Fact]
public async Task MarkStarted_UsesTimeProvider_ForStartedAt()
{
// Arrange
var run = CreateEvalRun();
await _evalRunRepo.CreateAsync(run);
// Act
var result = await _evalRunRepo.MarkStartedAsync(_tenantId, run.Id);
// Assert
result.Should().BeTrue();
var fetched = await _evalRunRepo.GetByIdAsync(_tenantId, run.Id);
fetched.Should().NotBeNull();
fetched!.Status.Should().Be(EvaluationStatus.Running);
fetched.StartedAt.Should().NotBeNull();
// The started_at timestamp must match the fixed time, not the current wall-clock time.
fetched.StartedAt!.Value.Should().BeCloseTo(FixedTime, TimeSpan.FromSeconds(1));
// Guard: the fixed time is far enough in the past that it cannot be confused with "now".
fetched.StartedAt.Value.Should().BeBefore(DateTimeOffset.UtcNow.AddYears(-1));
}
// -----------------------------------------------------------------------
// EvaluationRunRepository -- MarkCompletedAsync sets completed_at via TimeProvider
// -----------------------------------------------------------------------
[Trait("Category", TestCategories.Unit)]
[Fact]
public async Task MarkCompleted_UsesTimeProvider_ForCompletedAt()
{
// Arrange
var run = CreateEvalRun();
await _evalRunRepo.CreateAsync(run);
await _evalRunRepo.MarkStartedAsync(_tenantId, run.Id);
// Act
var result = await _evalRunRepo.MarkCompletedAsync(
_tenantId,
run.Id,
EvaluationResult.Pass,
score: 95.0m,
findingsCount: 3,
criticalCount: 0,
highCount: 1,
mediumCount: 1,
lowCount: 1,
durationMs: 250);
// Assert
result.Should().BeTrue();
var fetched = await _evalRunRepo.GetByIdAsync(_tenantId, run.Id);
fetched.Should().NotBeNull();
fetched!.Status.Should().Be(EvaluationStatus.Completed);
fetched.CompletedAt.Should().NotBeNull();
// The completed_at timestamp must match the fixed time.
fetched.CompletedAt!.Value.Should().BeCloseTo(FixedTime, TimeSpan.FromSeconds(1));
fetched.CompletedAt.Value.Should().BeBefore(DateTimeOffset.UtcNow.AddYears(-1));
}
// -----------------------------------------------------------------------
// EvaluationRunRepository -- MarkFailedAsync sets completed_at via TimeProvider
// -----------------------------------------------------------------------
[Trait("Category", TestCategories.Unit)]
[Fact]
public async Task MarkFailed_UsesTimeProvider_ForCompletedAt()
{
// Arrange
var run = CreateEvalRun();
await _evalRunRepo.CreateAsync(run);
// Act
var result = await _evalRunRepo.MarkFailedAsync(_tenantId, run.Id, "Timeout during evaluation");
// Assert
result.Should().BeTrue();
var fetched = await _evalRunRepo.GetByIdAsync(_tenantId, run.Id);
fetched.Should().NotBeNull();
fetched!.Status.Should().Be(EvaluationStatus.Failed);
fetched.CompletedAt.Should().NotBeNull();
// The completed_at timestamp must match the fixed time.
fetched.CompletedAt!.Value.Should().BeCloseTo(FixedTime, TimeSpan.FromSeconds(1));
fetched.CompletedAt.Value.Should().BeBefore(DateTimeOffset.UtcNow.AddYears(-1));
}
// -----------------------------------------------------------------------
// ConflictRepository -- ResolveAsync sets resolved_at via TimeProvider
// -----------------------------------------------------------------------
[Trait("Category", TestCategories.Unit)]
[Fact]
public async Task Resolve_UsesTimeProvider_ForResolvedAt()
{
// Arrange
var conflict = new ConflictEntity
{
Id = Guid.NewGuid(),
TenantId = _tenantId,
ConflictType = "rule_overlap",
Severity = "high",
Status = "open",
Description = "Rules A and B overlap on scope X",
CreatedAt = DateTimeOffset.UtcNow,
CreatedBy = "tests"
};
await _conflictRepo.CreateAsync(conflict);
// Act
var result = await _conflictRepo.ResolveAsync(
_tenantId, conflict.Id, "Merged rules", "admin");
// Assert
result.Should().BeTrue();
var fetched = await _conflictRepo.GetByIdAsync(_tenantId, conflict.Id);
fetched.Should().NotBeNull();
fetched!.Status.Should().Be("resolved");
fetched.ResolvedAt.Should().NotBeNull();
// The resolved_at timestamp must match the fixed time.
fetched.ResolvedAt!.Value.Should().BeCloseTo(FixedTime, TimeSpan.FromSeconds(1));
fetched.ResolvedAt.Value.Should().BeBefore(DateTimeOffset.UtcNow.AddYears(-1));
}
// -----------------------------------------------------------------------
// ConflictRepository -- DismissAsync sets resolved_at via TimeProvider
// -----------------------------------------------------------------------
[Trait("Category", TestCategories.Unit)]
[Fact]
public async Task Dismiss_UsesTimeProvider_ForResolvedAt()
{
// Arrange
var conflict = new ConflictEntity
{
Id = Guid.NewGuid(),
TenantId = _tenantId,
ConflictType = "precedence",
Severity = "low",
Status = "open",
Description = "Rule precedence ambiguity",
CreatedAt = DateTimeOffset.UtcNow,
CreatedBy = "tests"
};
await _conflictRepo.CreateAsync(conflict);
// Act
var result = await _conflictRepo.DismissAsync(_tenantId, conflict.Id, "operator");
// Assert
result.Should().BeTrue();
var fetched = await _conflictRepo.GetByIdAsync(_tenantId, conflict.Id);
fetched.Should().NotBeNull();
fetched!.Status.Should().Be("dismissed");
fetched.ResolvedAt.Should().NotBeNull();
// The resolved_at timestamp must match the fixed time.
fetched.ResolvedAt!.Value.Should().BeCloseTo(FixedTime, TimeSpan.FromSeconds(1));
fetched.ResolvedAt.Value.Should().BeBefore(DateTimeOffset.UtcNow.AddYears(-1));
}
// -----------------------------------------------------------------------
// Helpers
// -----------------------------------------------------------------------
private EvaluationRunEntity CreateEvalRun() => new()
{
Id = Guid.NewGuid(),
TenantId = _tenantId,
ProjectId = "tp-project",
PackId = _packId,
PackVersion = SeedPackVersion,
Status = EvaluationStatus.Pending
};
/// <summary>
/// A <see cref="TimeProvider"/> that always returns a fixed UTC time.
/// Used to prove that repository methods obtain their timestamps from the
/// injected provider rather than from SQL <c>NOW()</c>.
/// </summary>
private sealed class FixedTimeProvider : TimeProvider
{
private readonly DateTimeOffset _fixedTime;
public FixedTimeProvider(DateTimeOffset fixedTime) => _fixedTime = fixedTime;
public override DateTimeOffset GetUtcNow() => _fixedTime;
}
}