feat(deploy): add PendingDeployment entity + migration

This commit is contained in:
Joseph Doherty
2026-06-26 12:09:27 -04:00
parent b58f3aeb61
commit 81cb455f19
6 changed files with 2217 additions and 0 deletions
@@ -0,0 +1,28 @@
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using ZB.MOM.WW.ScadaBridge.Commons.Entities.Deployment;
using ZB.MOM.WW.ScadaBridge.Commons.Entities.Instances;
namespace ZB.MOM.WW.ScadaBridge.ConfigurationDatabase.Configurations;
public class PendingDeploymentConfiguration : IEntityTypeConfiguration<PendingDeployment>
{
/// <summary>Configures the EF Core mapping for <see cref="PendingDeployment"/>.</summary>
/// <param name="builder">The entity type builder.</param>
public void Configure(EntityTypeBuilder<PendingDeployment> builder)
{
builder.ToTable("PendingDeployments");
builder.HasKey(x => x.Id);
builder.Property(x => x.DeploymentId).IsRequired().HasMaxLength(100);
builder.HasIndex(x => x.DeploymentId).IsUnique();
builder.HasIndex(x => x.InstanceId);
builder.HasIndex(x => x.ExpiresAtUtc);
builder.Property(x => x.RevisionHash).IsRequired().HasMaxLength(100);
builder.Property(x => x.ConfigurationJson).IsRequired(); // nvarchar(max)
builder.Property(x => x.Token).IsRequired().HasMaxLength(128);
builder.HasOne<Instance>().WithMany()
.HasForeignKey(x => x.InstanceId)
.OnDelete(DeleteBehavior.Cascade);
}
}
@@ -0,0 +1,63 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace ZB.MOM.WW.ScadaBridge.ConfigurationDatabase.Migrations
{
/// <inheritdoc />
public partial class AddPendingDeployment : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "PendingDeployments",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
DeploymentId = table.Column<string>(type: "nvarchar(100)", maxLength: 100, nullable: false),
InstanceId = table.Column<int>(type: "int", nullable: false),
RevisionHash = table.Column<string>(type: "nvarchar(100)", maxLength: 100, nullable: false),
ConfigurationJson = table.Column<string>(type: "nvarchar(max)", nullable: false),
Token = table.Column<string>(type: "nvarchar(128)", maxLength: 128, nullable: false),
CreatedAtUtc = table.Column<DateTimeOffset>(type: "datetimeoffset", nullable: false),
ExpiresAtUtc = table.Column<DateTimeOffset>(type: "datetimeoffset", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_PendingDeployments", x => x.Id);
table.ForeignKey(
name: "FK_PendingDeployments_Instances_InstanceId",
column: x => x.InstanceId,
principalTable: "Instances",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateIndex(
name: "IX_PendingDeployments_DeploymentId",
table: "PendingDeployments",
column: "DeploymentId",
unique: true);
migrationBuilder.CreateIndex(
name: "IX_PendingDeployments_ExpiresAtUtc",
table: "PendingDeployments",
column: "ExpiresAtUtc");
migrationBuilder.CreateIndex(
name: "IX_PendingDeployments_InstanceId",
table: "PendingDeployments",
column: "InstanceId");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "PendingDeployments");
}
}
}
@@ -267,6 +267,54 @@ namespace ZB.MOM.WW.ScadaBridge.ConfigurationDatabase.Migrations
b.ToTable("DeploymentRecords");
});
modelBuilder.Entity("ZB.MOM.WW.ScadaBridge.Commons.Entities.Deployment.PendingDeployment", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<string>("ConfigurationJson")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<DateTimeOffset>("CreatedAtUtc")
.HasColumnType("datetimeoffset");
b.Property<string>("DeploymentId")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.Property<DateTimeOffset>("ExpiresAtUtc")
.HasColumnType("datetimeoffset");
b.Property<int>("InstanceId")
.HasColumnType("int");
b.Property<string>("RevisionHash")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.Property<string>("Token")
.IsRequired()
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.HasKey("Id");
b.HasIndex("DeploymentId")
.IsUnique();
b.HasIndex("ExpiresAtUtc");
b.HasIndex("InstanceId");
b.ToTable("PendingDeployments", (string)null);
});
modelBuilder.Entity("ZB.MOM.WW.ScadaBridge.Commons.Entities.Deployment.SystemArtifactDeploymentRecord", b =>
{
b.Property<int>("Id")
@@ -1720,6 +1768,15 @@ namespace ZB.MOM.WW.ScadaBridge.ConfigurationDatabase.Migrations
.IsRequired();
});
modelBuilder.Entity("ZB.MOM.WW.ScadaBridge.Commons.Entities.Deployment.PendingDeployment", b =>
{
b.HasOne("ZB.MOM.WW.ScadaBridge.Commons.Entities.Instances.Instance", null)
.WithMany()
.HasForeignKey("InstanceId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("ZB.MOM.WW.ScadaBridge.Commons.Entities.ExternalSystems.ExternalSystemMethod", b =>
{
b.HasOne("ZB.MOM.WW.ScadaBridge.Commons.Entities.ExternalSystems.ExternalSystemDefinition", null)
@@ -89,6 +89,8 @@ public class ScadaBridgeDbContext : DbContext, IDataProtectionKeyContext
public DbSet<SystemArtifactDeploymentRecord> SystemArtifactDeploymentRecords => Set<SystemArtifactDeploymentRecord>();
/// <summary>Gets the set of deployed configuration snapshots.</summary>
public DbSet<DeployedConfigSnapshot> DeployedConfigSnapshots => Set<DeployedConfigSnapshot>();
/// <summary>Gets the set of pending deployments staged for HTTP fetch by sites.</summary>
public DbSet<PendingDeployment> PendingDeployments => Set<PendingDeployment>();
// External Systems
/// <summary>Gets the set of external system definitions.</summary>