Search/AdvisoryAI and DAL conversion to EF finishes up. Preparation for microservices consolidation.
This commit is contained in:
@@ -0,0 +1,9 @@
|
||||
// <auto-generated />
|
||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||
using StellaOps.Provcache.Postgres;
|
||||
using StellaOps.Provcache.Postgres.EfCore.CompiledModels;
|
||||
|
||||
#pragma warning disable 219, 612, 618
|
||||
#nullable disable
|
||||
|
||||
[assembly: DbContextModel(typeof(ProvcacheDbContext), typeof(ProvcacheDbContextModel))]
|
||||
@@ -0,0 +1,47 @@
|
||||
// <auto-generated />
|
||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||
using Microsoft.EntityFrameworkCore.Metadata;
|
||||
|
||||
#pragma warning disable 219, 612, 618
|
||||
#nullable disable
|
||||
|
||||
namespace StellaOps.Provcache.Postgres.EfCore.CompiledModels
|
||||
{
|
||||
[DbContext(typeof(ProvcacheDbContext))]
|
||||
public partial class ProvcacheDbContextModel : RuntimeModel
|
||||
{
|
||||
private static readonly bool _useOldBehavior31751 =
|
||||
System.AppContext.TryGetSwitch("Microsoft.EntityFrameworkCore.Issue31751", out var enabled31751) && enabled31751;
|
||||
|
||||
static ProvcacheDbContextModel()
|
||||
{
|
||||
var model = new ProvcacheDbContextModel();
|
||||
|
||||
if (_useOldBehavior31751)
|
||||
{
|
||||
model.Initialize();
|
||||
}
|
||||
else
|
||||
{
|
||||
var thread = new System.Threading.Thread(RunInitialization, 10 * 1024 * 1024);
|
||||
thread.Start();
|
||||
thread.Join();
|
||||
|
||||
void RunInitialization()
|
||||
{
|
||||
model.Initialize();
|
||||
}
|
||||
}
|
||||
|
||||
model.Customize();
|
||||
_instance = (ProvcacheDbContextModel)model.FinalizeModel();
|
||||
}
|
||||
|
||||
private static ProvcacheDbContextModel _instance;
|
||||
public static IModel Instance => _instance;
|
||||
|
||||
partial void Initialize();
|
||||
|
||||
partial void Customize();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
// <auto-generated />
|
||||
using System;
|
||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||
using Microsoft.EntityFrameworkCore.Metadata;
|
||||
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
|
||||
|
||||
#pragma warning disable 219, 612, 618
|
||||
#nullable disable
|
||||
|
||||
namespace StellaOps.Provcache.Postgres.EfCore.CompiledModels
|
||||
{
|
||||
public partial class ProvcacheDbContextModel
|
||||
{
|
||||
private ProvcacheDbContextModel()
|
||||
: base(skipDetectChanges: false, modelId: new Guid("2a8c29a9-57cf-4b35-8d5b-07f4a6a83a74"), entityTypeCount: 3)
|
||||
{
|
||||
}
|
||||
|
||||
partial void Initialize()
|
||||
{
|
||||
var provcacheEvidenceChunkEntity = ProvcacheEvidenceChunkEntityEntityType.Create(this);
|
||||
var provcacheItemEntity = ProvcacheItemEntityEntityType.Create(this);
|
||||
var provcacheRevocationEntity = ProvcacheRevocationEntityEntityType.Create(this);
|
||||
|
||||
ProvcacheEvidenceChunkEntityEntityType.CreateAnnotations(provcacheEvidenceChunkEntity);
|
||||
ProvcacheItemEntityEntityType.CreateAnnotations(provcacheItemEntity);
|
||||
ProvcacheRevocationEntityEntityType.CreateAnnotations(provcacheRevocationEntity);
|
||||
|
||||
AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
|
||||
AddAnnotation("ProductVersion", "10.0.0");
|
||||
AddAnnotation("Relational:DefaultSchema", "provcache");
|
||||
AddAnnotation("Relational:MaxIdentifierLength", 63);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,128 @@
|
||||
// <auto-generated />
|
||||
using System;
|
||||
using System.Reflection;
|
||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||
using Microsoft.EntityFrameworkCore.Metadata;
|
||||
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
|
||||
using StellaOps.Provcache.Entities;
|
||||
|
||||
#pragma warning disable 219, 612, 618
|
||||
#nullable disable
|
||||
|
||||
namespace StellaOps.Provcache.Postgres.EfCore.CompiledModels
|
||||
{
|
||||
[EntityFrameworkInternal]
|
||||
public partial class ProvcacheEvidenceChunkEntityEntityType
|
||||
{
|
||||
public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null)
|
||||
{
|
||||
var runtimeEntityType = model.AddEntityType(
|
||||
"StellaOps.Provcache.Entities.ProvcacheEvidenceChunkEntity",
|
||||
typeof(ProvcacheEvidenceChunkEntity),
|
||||
baseEntityType,
|
||||
propertyCount: 8,
|
||||
unnamedIndexCount: 2,
|
||||
keyCount: 1);
|
||||
|
||||
var chunkId = runtimeEntityType.AddProperty(
|
||||
"ChunkId",
|
||||
typeof(Guid),
|
||||
propertyInfo: typeof(ProvcacheEvidenceChunkEntity).GetProperty("ChunkId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
|
||||
fieldInfo: typeof(ProvcacheEvidenceChunkEntity).GetField("<ChunkId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
|
||||
valueGenerated: ValueGenerated.OnAdd,
|
||||
afterSaveBehavior: PropertySaveBehavior.Throw,
|
||||
sentinel: new Guid("00000000-0000-0000-0000-000000000000"));
|
||||
chunkId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
|
||||
chunkId.AddAnnotation("Relational:ColumnName", "chunk_id");
|
||||
|
||||
var blob = runtimeEntityType.AddProperty(
|
||||
"Blob",
|
||||
typeof(byte[]),
|
||||
propertyInfo: typeof(ProvcacheEvidenceChunkEntity).GetProperty("Blob", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
|
||||
fieldInfo: typeof(ProvcacheEvidenceChunkEntity).GetField("<Blob>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
|
||||
blob.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
|
||||
blob.AddAnnotation("Relational:ColumnName", "blob");
|
||||
|
||||
var blobSize = runtimeEntityType.AddProperty(
|
||||
"BlobSize",
|
||||
typeof(int),
|
||||
propertyInfo: typeof(ProvcacheEvidenceChunkEntity).GetProperty("BlobSize", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
|
||||
fieldInfo: typeof(ProvcacheEvidenceChunkEntity).GetField("<BlobSize>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
|
||||
sentinel: 0);
|
||||
blobSize.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
|
||||
blobSize.AddAnnotation("Relational:ColumnName", "blob_size");
|
||||
|
||||
var chunkHash = runtimeEntityType.AddProperty(
|
||||
"ChunkHash",
|
||||
typeof(string),
|
||||
propertyInfo: typeof(ProvcacheEvidenceChunkEntity).GetProperty("ChunkHash", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
|
||||
fieldInfo: typeof(ProvcacheEvidenceChunkEntity).GetField("<ChunkHash>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
|
||||
maxLength: 128);
|
||||
chunkHash.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
|
||||
chunkHash.AddAnnotation("Relational:ColumnName", "chunk_hash");
|
||||
|
||||
var chunkIndex = runtimeEntityType.AddProperty(
|
||||
"ChunkIndex",
|
||||
typeof(int),
|
||||
propertyInfo: typeof(ProvcacheEvidenceChunkEntity).GetProperty("ChunkIndex", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
|
||||
fieldInfo: typeof(ProvcacheEvidenceChunkEntity).GetField("<ChunkIndex>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
|
||||
sentinel: 0);
|
||||
chunkIndex.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
|
||||
chunkIndex.AddAnnotation("Relational:ColumnName", "chunk_index");
|
||||
|
||||
var contentType = runtimeEntityType.AddProperty(
|
||||
"ContentType",
|
||||
typeof(string),
|
||||
propertyInfo: typeof(ProvcacheEvidenceChunkEntity).GetProperty("ContentType", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
|
||||
fieldInfo: typeof(ProvcacheEvidenceChunkEntity).GetField("<ContentType>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
|
||||
maxLength: 128);
|
||||
contentType.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
|
||||
contentType.AddAnnotation("Relational:ColumnName", "content_type");
|
||||
|
||||
var createdAt = runtimeEntityType.AddProperty(
|
||||
"CreatedAt",
|
||||
typeof(DateTimeOffset),
|
||||
propertyInfo: typeof(ProvcacheEvidenceChunkEntity).GetProperty("CreatedAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
|
||||
fieldInfo: typeof(ProvcacheEvidenceChunkEntity).GetField("<CreatedAt>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)));
|
||||
createdAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
|
||||
createdAt.AddAnnotation("Relational:ColumnName", "created_at");
|
||||
|
||||
var proofRoot = runtimeEntityType.AddProperty(
|
||||
"ProofRoot",
|
||||
typeof(string),
|
||||
propertyInfo: typeof(ProvcacheEvidenceChunkEntity).GetProperty("ProofRoot", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
|
||||
fieldInfo: typeof(ProvcacheEvidenceChunkEntity).GetField("<ProofRoot>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
|
||||
maxLength: 128);
|
||||
proofRoot.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
|
||||
proofRoot.AddAnnotation("Relational:ColumnName", "proof_root");
|
||||
|
||||
var key = runtimeEntityType.AddKey(
|
||||
new[] { chunkId });
|
||||
runtimeEntityType.SetPrimaryKey(key);
|
||||
|
||||
var index = runtimeEntityType.AddIndex(
|
||||
new[] { proofRoot });
|
||||
|
||||
var index0 = runtimeEntityType.AddIndex(
|
||||
new[] { proofRoot, chunkIndex },
|
||||
unique: true);
|
||||
|
||||
return runtimeEntityType;
|
||||
}
|
||||
|
||||
public static void CreateAnnotations(RuntimeEntityType runtimeEntityType)
|
||||
{
|
||||
runtimeEntityType.AddAnnotation("Relational:FunctionName", null);
|
||||
runtimeEntityType.AddAnnotation("Relational:Schema", "provcache");
|
||||
runtimeEntityType.AddAnnotation("Relational:SqlQuery", null);
|
||||
runtimeEntityType.AddAnnotation("Relational:TableName", "prov_evidence_chunks");
|
||||
runtimeEntityType.AddAnnotation("Relational:ViewName", null);
|
||||
runtimeEntityType.AddAnnotation("Relational:ViewSchema", null);
|
||||
|
||||
Customize(runtimeEntityType);
|
||||
}
|
||||
|
||||
static partial void Customize(RuntimeEntityType runtimeEntityType);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,190 @@
|
||||
// <auto-generated />
|
||||
using System;
|
||||
using System.Reflection;
|
||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||
using Microsoft.EntityFrameworkCore.Metadata;
|
||||
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
|
||||
using StellaOps.Provcache.Entities;
|
||||
|
||||
#pragma warning disable 219, 612, 618
|
||||
#nullable disable
|
||||
|
||||
namespace StellaOps.Provcache.Postgres.EfCore.CompiledModels
|
||||
{
|
||||
[EntityFrameworkInternal]
|
||||
public partial class ProvcacheItemEntityEntityType
|
||||
{
|
||||
public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null)
|
||||
{
|
||||
var runtimeEntityType = model.AddEntityType(
|
||||
"StellaOps.Provcache.Entities.ProvcacheItemEntity",
|
||||
typeof(ProvcacheItemEntity),
|
||||
baseEntityType,
|
||||
propertyCount: 14,
|
||||
unnamedIndexCount: 5,
|
||||
keyCount: 1);
|
||||
|
||||
var veriKey = runtimeEntityType.AddProperty(
|
||||
"VeriKey",
|
||||
typeof(string),
|
||||
propertyInfo: typeof(ProvcacheItemEntity).GetProperty("VeriKey", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
|
||||
fieldInfo: typeof(ProvcacheItemEntity).GetField("<VeriKey>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
|
||||
afterSaveBehavior: PropertySaveBehavior.Throw,
|
||||
maxLength: 512);
|
||||
veriKey.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
|
||||
veriKey.AddAnnotation("Relational:ColumnName", "verikey");
|
||||
|
||||
var createdAt = runtimeEntityType.AddProperty(
|
||||
"CreatedAt",
|
||||
typeof(DateTimeOffset),
|
||||
propertyInfo: typeof(ProvcacheItemEntity).GetProperty("CreatedAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
|
||||
fieldInfo: typeof(ProvcacheItemEntity).GetField("<CreatedAt>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)));
|
||||
createdAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
|
||||
createdAt.AddAnnotation("Relational:ColumnName", "created_at");
|
||||
|
||||
var digestVersion = runtimeEntityType.AddProperty(
|
||||
"DigestVersion",
|
||||
typeof(string),
|
||||
propertyInfo: typeof(ProvcacheItemEntity).GetProperty("DigestVersion", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
|
||||
fieldInfo: typeof(ProvcacheItemEntity).GetField("<DigestVersion>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
|
||||
maxLength: 16);
|
||||
digestVersion.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
|
||||
digestVersion.AddAnnotation("Relational:ColumnName", "digest_version");
|
||||
|
||||
var expiresAt = runtimeEntityType.AddProperty(
|
||||
"ExpiresAt",
|
||||
typeof(DateTimeOffset),
|
||||
propertyInfo: typeof(ProvcacheItemEntity).GetProperty("ExpiresAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
|
||||
fieldInfo: typeof(ProvcacheItemEntity).GetField("<ExpiresAt>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)));
|
||||
expiresAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
|
||||
expiresAt.AddAnnotation("Relational:ColumnName", "expires_at");
|
||||
|
||||
var feedEpoch = runtimeEntityType.AddProperty(
|
||||
"FeedEpoch",
|
||||
typeof(string),
|
||||
propertyInfo: typeof(ProvcacheItemEntity).GetProperty("FeedEpoch", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
|
||||
fieldInfo: typeof(ProvcacheItemEntity).GetField("<FeedEpoch>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
|
||||
maxLength: 64);
|
||||
feedEpoch.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
|
||||
feedEpoch.AddAnnotation("Relational:ColumnName", "feed_epoch");
|
||||
|
||||
var hitCount = runtimeEntityType.AddProperty(
|
||||
"HitCount",
|
||||
typeof(long),
|
||||
propertyInfo: typeof(ProvcacheItemEntity).GetProperty("HitCount", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
|
||||
fieldInfo: typeof(ProvcacheItemEntity).GetField("<HitCount>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
|
||||
sentinel: 0L);
|
||||
hitCount.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
|
||||
hitCount.AddAnnotation("Relational:ColumnName", "hit_count");
|
||||
|
||||
var lastAccessedAt = runtimeEntityType.AddProperty(
|
||||
"LastAccessedAt",
|
||||
typeof(DateTimeOffset?),
|
||||
propertyInfo: typeof(ProvcacheItemEntity).GetProperty("LastAccessedAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
|
||||
fieldInfo: typeof(ProvcacheItemEntity).GetField("<LastAccessedAt>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
|
||||
nullable: true);
|
||||
lastAccessedAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
|
||||
lastAccessedAt.AddAnnotation("Relational:ColumnName", "last_accessed_at");
|
||||
|
||||
var policyHash = runtimeEntityType.AddProperty(
|
||||
"PolicyHash",
|
||||
typeof(string),
|
||||
propertyInfo: typeof(ProvcacheItemEntity).GetProperty("PolicyHash", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
|
||||
fieldInfo: typeof(ProvcacheItemEntity).GetField("<PolicyHash>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
|
||||
maxLength: 128);
|
||||
policyHash.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
|
||||
policyHash.AddAnnotation("Relational:ColumnName", "policy_hash");
|
||||
|
||||
var proofRoot = runtimeEntityType.AddProperty(
|
||||
"ProofRoot",
|
||||
typeof(string),
|
||||
propertyInfo: typeof(ProvcacheItemEntity).GetProperty("ProofRoot", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
|
||||
fieldInfo: typeof(ProvcacheItemEntity).GetField("<ProofRoot>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
|
||||
maxLength: 128);
|
||||
proofRoot.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
|
||||
proofRoot.AddAnnotation("Relational:ColumnName", "proof_root");
|
||||
|
||||
var replaySeed = runtimeEntityType.AddProperty(
|
||||
"ReplaySeed",
|
||||
typeof(string),
|
||||
propertyInfo: typeof(ProvcacheItemEntity).GetProperty("ReplaySeed", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
|
||||
fieldInfo: typeof(ProvcacheItemEntity).GetField("<ReplaySeed>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
|
||||
replaySeed.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
|
||||
replaySeed.AddAnnotation("Relational:ColumnName", "replay_seed");
|
||||
replaySeed.AddAnnotation("Relational:ColumnType", "jsonb");
|
||||
|
||||
var signerSetHash = runtimeEntityType.AddProperty(
|
||||
"SignerSetHash",
|
||||
typeof(string),
|
||||
propertyInfo: typeof(ProvcacheItemEntity).GetProperty("SignerSetHash", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
|
||||
fieldInfo: typeof(ProvcacheItemEntity).GetField("<SignerSetHash>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
|
||||
maxLength: 128);
|
||||
signerSetHash.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
|
||||
signerSetHash.AddAnnotation("Relational:ColumnName", "signer_set_hash");
|
||||
|
||||
var trustScore = runtimeEntityType.AddProperty(
|
||||
"TrustScore",
|
||||
typeof(int),
|
||||
propertyInfo: typeof(ProvcacheItemEntity).GetProperty("TrustScore", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
|
||||
fieldInfo: typeof(ProvcacheItemEntity).GetField("<TrustScore>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
|
||||
sentinel: 0);
|
||||
trustScore.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
|
||||
trustScore.AddAnnotation("Relational:ColumnName", "trust_score");
|
||||
|
||||
var updatedAt = runtimeEntityType.AddProperty(
|
||||
"UpdatedAt",
|
||||
typeof(DateTimeOffset),
|
||||
propertyInfo: typeof(ProvcacheItemEntity).GetProperty("UpdatedAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
|
||||
fieldInfo: typeof(ProvcacheItemEntity).GetField("<UpdatedAt>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)));
|
||||
updatedAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
|
||||
updatedAt.AddAnnotation("Relational:ColumnName", "updated_at");
|
||||
|
||||
var verdictHash = runtimeEntityType.AddProperty(
|
||||
"VerdictHash",
|
||||
typeof(string),
|
||||
propertyInfo: typeof(ProvcacheItemEntity).GetProperty("VerdictHash", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
|
||||
fieldInfo: typeof(ProvcacheItemEntity).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 key = runtimeEntityType.AddKey(
|
||||
new[] { veriKey });
|
||||
runtimeEntityType.SetPrimaryKey(key);
|
||||
|
||||
var index = runtimeEntityType.AddIndex(
|
||||
new[] { createdAt });
|
||||
|
||||
var index0 = runtimeEntityType.AddIndex(
|
||||
new[] { expiresAt });
|
||||
|
||||
var index1 = runtimeEntityType.AddIndex(
|
||||
new[] { feedEpoch });
|
||||
|
||||
var index2 = runtimeEntityType.AddIndex(
|
||||
new[] { policyHash });
|
||||
|
||||
var index3 = runtimeEntityType.AddIndex(
|
||||
new[] { signerSetHash });
|
||||
|
||||
return runtimeEntityType;
|
||||
}
|
||||
|
||||
public static void CreateAnnotations(RuntimeEntityType runtimeEntityType)
|
||||
{
|
||||
runtimeEntityType.AddAnnotation("Relational:FunctionName", null);
|
||||
runtimeEntityType.AddAnnotation("Relational:Schema", "provcache");
|
||||
runtimeEntityType.AddAnnotation("Relational:SqlQuery", null);
|
||||
runtimeEntityType.AddAnnotation("Relational:TableName", "provcache_items");
|
||||
runtimeEntityType.AddAnnotation("Relational:ViewName", null);
|
||||
runtimeEntityType.AddAnnotation("Relational:ViewSchema", null);
|
||||
|
||||
Customize(runtimeEntityType);
|
||||
}
|
||||
|
||||
static partial void Customize(RuntimeEntityType runtimeEntityType);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
// <auto-generated />
|
||||
using System;
|
||||
using System.Reflection;
|
||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||
using Microsoft.EntityFrameworkCore.Metadata;
|
||||
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
|
||||
using StellaOps.Provcache.Entities;
|
||||
|
||||
#pragma warning disable 219, 612, 618
|
||||
#nullable disable
|
||||
|
||||
namespace StellaOps.Provcache.Postgres.EfCore.CompiledModels
|
||||
{
|
||||
[EntityFrameworkInternal]
|
||||
public partial class ProvcacheRevocationEntityEntityType
|
||||
{
|
||||
public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null)
|
||||
{
|
||||
var runtimeEntityType = model.AddEntityType(
|
||||
"StellaOps.Provcache.Entities.ProvcacheRevocationEntity",
|
||||
typeof(ProvcacheRevocationEntity),
|
||||
baseEntityType,
|
||||
propertyCount: 7,
|
||||
unnamedIndexCount: 2,
|
||||
keyCount: 1);
|
||||
|
||||
var revocationId = runtimeEntityType.AddProperty(
|
||||
"RevocationId",
|
||||
typeof(Guid),
|
||||
propertyInfo: typeof(ProvcacheRevocationEntity).GetProperty("RevocationId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
|
||||
fieldInfo: typeof(ProvcacheRevocationEntity).GetField("<RevocationId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
|
||||
valueGenerated: ValueGenerated.OnAdd,
|
||||
afterSaveBehavior: PropertySaveBehavior.Throw,
|
||||
sentinel: new Guid("00000000-0000-0000-0000-000000000000"));
|
||||
revocationId.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
|
||||
revocationId.AddAnnotation("Relational:ColumnName", "revocation_id");
|
||||
|
||||
var actor = runtimeEntityType.AddProperty(
|
||||
"Actor",
|
||||
typeof(string),
|
||||
propertyInfo: typeof(ProvcacheRevocationEntity).GetProperty("Actor", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
|
||||
fieldInfo: typeof(ProvcacheRevocationEntity).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 createdAt = runtimeEntityType.AddProperty(
|
||||
"CreatedAt",
|
||||
typeof(DateTimeOffset),
|
||||
propertyInfo: typeof(ProvcacheRevocationEntity).GetProperty("CreatedAt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
|
||||
fieldInfo: typeof(ProvcacheRevocationEntity).GetField("<CreatedAt>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)));
|
||||
createdAt.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
|
||||
createdAt.AddAnnotation("Relational:ColumnName", "created_at");
|
||||
|
||||
var entriesAffected = runtimeEntityType.AddProperty(
|
||||
"EntriesAffected",
|
||||
typeof(long),
|
||||
propertyInfo: typeof(ProvcacheRevocationEntity).GetProperty("EntriesAffected", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
|
||||
fieldInfo: typeof(ProvcacheRevocationEntity).GetField("<EntriesAffected>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
|
||||
sentinel: 0L);
|
||||
entriesAffected.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
|
||||
entriesAffected.AddAnnotation("Relational:ColumnName", "entries_affected");
|
||||
|
||||
var reason = runtimeEntityType.AddProperty(
|
||||
"Reason",
|
||||
typeof(string),
|
||||
propertyInfo: typeof(ProvcacheRevocationEntity).GetProperty("Reason", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
|
||||
fieldInfo: typeof(ProvcacheRevocationEntity).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 revocationType = runtimeEntityType.AddProperty(
|
||||
"RevocationType",
|
||||
typeof(string),
|
||||
propertyInfo: typeof(ProvcacheRevocationEntity).GetProperty("RevocationType", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
|
||||
fieldInfo: typeof(ProvcacheRevocationEntity).GetField("<RevocationType>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
|
||||
maxLength: 64);
|
||||
revocationType.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
|
||||
revocationType.AddAnnotation("Relational:ColumnName", "revocation_type");
|
||||
|
||||
var targetHash = runtimeEntityType.AddProperty(
|
||||
"TargetHash",
|
||||
typeof(string),
|
||||
propertyInfo: typeof(ProvcacheRevocationEntity).GetProperty("TargetHash", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
|
||||
fieldInfo: typeof(ProvcacheRevocationEntity).GetField("<TargetHash>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
|
||||
maxLength: 256);
|
||||
targetHash.AddAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.None);
|
||||
targetHash.AddAnnotation("Relational:ColumnName", "target_hash");
|
||||
|
||||
var key = runtimeEntityType.AddKey(
|
||||
new[] { revocationId });
|
||||
runtimeEntityType.SetPrimaryKey(key);
|
||||
|
||||
var index = runtimeEntityType.AddIndex(
|
||||
new[] { createdAt });
|
||||
|
||||
var index0 = runtimeEntityType.AddIndex(
|
||||
new[] { targetHash });
|
||||
|
||||
return runtimeEntityType;
|
||||
}
|
||||
|
||||
public static void CreateAnnotations(RuntimeEntityType runtimeEntityType)
|
||||
{
|
||||
runtimeEntityType.AddAnnotation("Relational:FunctionName", null);
|
||||
runtimeEntityType.AddAnnotation("Relational:Schema", "provcache");
|
||||
runtimeEntityType.AddAnnotation("Relational:SqlQuery", null);
|
||||
runtimeEntityType.AddAnnotation("Relational:TableName", "prov_revocations");
|
||||
runtimeEntityType.AddAnnotation("Relational:ViewName", null);
|
||||
runtimeEntityType.AddAnnotation("Relational:ViewSchema", null);
|
||||
|
||||
Customize(runtimeEntityType);
|
||||
}
|
||||
|
||||
static partial void Customize(RuntimeEntityType runtimeEntityType);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Design;
|
||||
|
||||
namespace StellaOps.Provcache.Postgres.EfCore.Context;
|
||||
|
||||
/// <summary>
|
||||
/// Design-time DbContext factory for dotnet ef CLI tooling.
|
||||
/// Used by scaffold and optimize commands.
|
||||
/// </summary>
|
||||
public sealed class ProvcacheDesignTimeDbContextFactory : IDesignTimeDbContextFactory<ProvcacheDbContext>
|
||||
{
|
||||
private const string DefaultConnectionString =
|
||||
"Host=localhost;Port=55433;Database=postgres;Username=postgres;Password=postgres;Search Path=provcache,public";
|
||||
|
||||
private const string ConnectionStringEnvironmentVariable = "STELLAOPS_PROVCACHE_EF_CONNECTION";
|
||||
|
||||
public ProvcacheDbContext CreateDbContext(string[] args)
|
||||
{
|
||||
var connectionString = ResolveConnectionString();
|
||||
var options = new DbContextOptionsBuilder<ProvcacheDbContext>()
|
||||
.UseNpgsql(connectionString)
|
||||
.Options;
|
||||
|
||||
return new ProvcacheDbContext(options);
|
||||
}
|
||||
|
||||
private static string ResolveConnectionString()
|
||||
{
|
||||
var fromEnvironment = Environment.GetEnvironmentVariable(ConnectionStringEnvironmentVariable);
|
||||
return string.IsNullOrWhiteSpace(fromEnvironment) ? DefaultConnectionString : fromEnvironment;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
-- ============================================================================
|
||||
-- Provcache — Initial Schema
|
||||
-- Extracted from ProvcacheDbContext OnModelCreating
|
||||
-- ============================================================================
|
||||
|
||||
CREATE SCHEMA IF NOT EXISTS provcache;
|
||||
|
||||
-- Provcache items (verification cache entries)
|
||||
CREATE TABLE IF NOT EXISTS provcache.provcache_item_entity (
|
||||
veri_key VARCHAR(512) PRIMARY KEY,
|
||||
digest_version VARCHAR(16) NOT NULL,
|
||||
verdict_hash VARCHAR(128) NOT NULL,
|
||||
proof_root VARCHAR(128) NOT NULL,
|
||||
replay_seed JSONB NOT NULL,
|
||||
policy_hash VARCHAR(128) NOT NULL,
|
||||
signer_set_hash VARCHAR(128) NOT NULL,
|
||||
feed_epoch VARCHAR(64) NOT NULL,
|
||||
trust_score INTEGER NOT NULL DEFAULT 0,
|
||||
hit_count BIGINT NOT NULL DEFAULT 0,
|
||||
created_at TIMESTAMPTZ NOT NULL,
|
||||
expires_at TIMESTAMPTZ NOT NULL,
|
||||
updated_at TIMESTAMPTZ NOT NULL,
|
||||
last_accessed_at TIMESTAMPTZ
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS ix_provcache_items_policy_hash
|
||||
ON provcache.provcache_item_entity (policy_hash);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS ix_provcache_items_signer_set_hash
|
||||
ON provcache.provcache_item_entity (signer_set_hash);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS ix_provcache_items_feed_epoch
|
||||
ON provcache.provcache_item_entity (feed_epoch);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS ix_provcache_items_expires_at
|
||||
ON provcache.provcache_item_entity (expires_at);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS ix_provcache_items_created_at
|
||||
ON provcache.provcache_item_entity (created_at);
|
||||
|
||||
-- Evidence chunks
|
||||
CREATE TABLE IF NOT EXISTS provcache.provcache_evidence_chunk_entity (
|
||||
chunk_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
proof_root VARCHAR(128) NOT NULL,
|
||||
chunk_index INTEGER NOT NULL,
|
||||
chunk_hash VARCHAR(128) NOT NULL,
|
||||
blob BYTEA NOT NULL,
|
||||
blob_size INTEGER NOT NULL,
|
||||
content_type VARCHAR(128) NOT NULL,
|
||||
created_at TIMESTAMPTZ NOT NULL
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS ix_provcache_evidence_chunks_proof_root
|
||||
ON provcache.provcache_evidence_chunk_entity (proof_root);
|
||||
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS ix_provcache_evidence_chunks_proof_root_chunk_index
|
||||
ON provcache.provcache_evidence_chunk_entity (proof_root, chunk_index);
|
||||
|
||||
-- Revocations
|
||||
CREATE TABLE IF NOT EXISTS provcache.provcache_revocation_entity (
|
||||
revocation_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
revocation_type VARCHAR(64) NOT NULL,
|
||||
target_hash VARCHAR(256) NOT NULL,
|
||||
reason VARCHAR(512),
|
||||
actor VARCHAR(256),
|
||||
entries_affected BIGINT NOT NULL,
|
||||
created_at TIMESTAMPTZ NOT NULL
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS ix_provcache_revocations_created_at
|
||||
ON provcache.provcache_revocation_entity (created_at);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS ix_provcache_revocations_target_hash
|
||||
ON provcache.provcache_revocation_entity (target_hash);
|
||||
@@ -0,0 +1,25 @@
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Npgsql;
|
||||
using StellaOps.Provcache.Postgres.EfCore.CompiledModels;
|
||||
|
||||
namespace StellaOps.Provcache.Postgres;
|
||||
|
||||
internal static class ProvcacheDbContextFactory
|
||||
{
|
||||
public static ProvcacheDbContext Create(NpgsqlConnection connection, int commandTimeoutSeconds, string schemaName)
|
||||
{
|
||||
var normalizedSchema = string.IsNullOrWhiteSpace(schemaName)
|
||||
? ProvcacheDbContext.DefaultSchemaName
|
||||
: schemaName.Trim();
|
||||
|
||||
var optionsBuilder = new DbContextOptionsBuilder<ProvcacheDbContext>()
|
||||
.UseNpgsql(connection, npgsql => npgsql.CommandTimeout(commandTimeoutSeconds));
|
||||
|
||||
if (string.Equals(normalizedSchema, ProvcacheDbContext.DefaultSchemaName, StringComparison.Ordinal))
|
||||
{
|
||||
optionsBuilder.UseModel(ProvcacheDbContextModel.Instance);
|
||||
}
|
||||
|
||||
return new ProvcacheDbContext(optionsBuilder.Options, normalizedSchema);
|
||||
}
|
||||
}
|
||||
@@ -5,11 +5,20 @@ namespace StellaOps.Provcache.Postgres;
|
||||
|
||||
/// <summary>
|
||||
/// EF Core DbContext for Provcache storage.
|
||||
/// SQL migrations remain authoritative; EF models are scaffolded FROM schema.
|
||||
/// </summary>
|
||||
public class ProvcacheDbContext : DbContext
|
||||
public partial class ProvcacheDbContext : DbContext
|
||||
{
|
||||
public ProvcacheDbContext(DbContextOptions<ProvcacheDbContext> options) : base(options)
|
||||
public const string DefaultSchemaName = "provcache";
|
||||
|
||||
private readonly string _schemaName;
|
||||
|
||||
public ProvcacheDbContext(DbContextOptions<ProvcacheDbContext> options, string? schemaName = null)
|
||||
: base(options)
|
||||
{
|
||||
_schemaName = string.IsNullOrWhiteSpace(schemaName)
|
||||
? DefaultSchemaName
|
||||
: schemaName.Trim();
|
||||
}
|
||||
|
||||
public DbSet<ProvcacheItemEntity> ProvcacheItems => Set<ProvcacheItemEntity>();
|
||||
@@ -18,15 +27,15 @@ public class ProvcacheDbContext : DbContext
|
||||
|
||||
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||||
{
|
||||
base.OnModelCreating(modelBuilder);
|
||||
var schema = _schemaName;
|
||||
|
||||
modelBuilder.HasDefaultSchema("provcache");
|
||||
modelBuilder.HasDefaultSchema(schema);
|
||||
|
||||
// ProvcacheItemEntity configuration
|
||||
modelBuilder.Entity<ProvcacheItemEntity>(entity =>
|
||||
{
|
||||
entity.HasKey(e => e.VeriKey);
|
||||
|
||||
|
||||
entity.HasIndex(e => e.PolicyHash);
|
||||
entity.HasIndex(e => e.SignerSetHash);
|
||||
entity.HasIndex(e => e.FeedEpoch);
|
||||
@@ -54,5 +63,9 @@ public class ProvcacheDbContext : DbContext
|
||||
entity.HasIndex(e => e.CreatedAt);
|
||||
entity.HasIndex(e => e.TargetHash);
|
||||
});
|
||||
|
||||
OnModelCreatingPartial(modelBuilder);
|
||||
}
|
||||
|
||||
partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
|
||||
}
|
||||
|
||||
@@ -12,8 +12,23 @@
|
||||
<Description>PostgreSQL storage implementation for StellaOps Provcache</Description>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<InternalsVisibleTo Include="StellaOps.Provcache.Postgres.Tests" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<!-- Embed SQL migrations as resources -->
|
||||
<EmbeddedResource Include="Migrations\**\*.sql" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<!-- Prevent automatic compiled-model binding so non-default schemas can build runtime models. -->
|
||||
<Compile Remove="EfCore\CompiledModels\ProvcacheDbContextAssemblyAttributes.cs" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" PrivateAssets="all" />
|
||||
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" />
|
||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" />
|
||||
|
||||
Reference in New Issue
Block a user