feat(notification-outbox): add Notifications table migration

This commit is contained in:
Joseph Doherty
2026-05-19 01:07:30 -04:00
parent 07cd185368
commit 5696a8af9f
3 changed files with 1593 additions and 0 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,72 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace ScadaLink.ConfigurationDatabase.Migrations
{
/// <inheritdoc />
public partial class AddNotificationsTable : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<string>(
name: "Type",
table: "NotificationLists",
type: "nvarchar(32)",
maxLength: 32,
nullable: false,
defaultValue: "");
migrationBuilder.CreateTable(
name: "Notifications",
columns: table => new
{
NotificationId = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: false),
Type = table.Column<string>(type: "nvarchar(32)", maxLength: 32, nullable: false),
ListName = table.Column<string>(type: "nvarchar(200)", maxLength: 200, nullable: false),
Subject = table.Column<string>(type: "nvarchar(1000)", maxLength: 1000, nullable: false),
Body = table.Column<string>(type: "nvarchar(max)", nullable: false),
TypeData = table.Column<string>(type: "nvarchar(max)", nullable: true),
Status = table.Column<string>(type: "nvarchar(32)", maxLength: 32, nullable: false),
RetryCount = table.Column<int>(type: "int", nullable: false),
LastError = table.Column<string>(type: "nvarchar(4000)", maxLength: 4000, nullable: true),
ResolvedTargets = table.Column<string>(type: "nvarchar(max)", nullable: true),
SourceSiteId = table.Column<string>(type: "nvarchar(100)", maxLength: 100, nullable: false),
SourceInstanceId = table.Column<string>(type: "nvarchar(200)", maxLength: 200, nullable: true),
SourceScript = table.Column<string>(type: "nvarchar(200)", maxLength: 200, nullable: true),
SiteEnqueuedAt = table.Column<DateTimeOffset>(type: "datetimeoffset", nullable: false),
CreatedAt = table.Column<DateTimeOffset>(type: "datetimeoffset", nullable: false),
LastAttemptAt = table.Column<DateTimeOffset>(type: "datetimeoffset", nullable: true),
NextAttemptAt = table.Column<DateTimeOffset>(type: "datetimeoffset", nullable: true),
DeliveredAt = table.Column<DateTimeOffset>(type: "datetimeoffset", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_Notifications", x => x.NotificationId);
});
migrationBuilder.CreateIndex(
name: "IX_Notifications_SourceSiteId_CreatedAt",
table: "Notifications",
columns: new[] { "SourceSiteId", "CreatedAt" });
migrationBuilder.CreateIndex(
name: "IX_Notifications_Status_NextAttemptAt",
table: "Notifications",
columns: new[] { "Status", "NextAttemptAt" });
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "Notifications");
migrationBuilder.DropColumn(
name: "Type",
table: "NotificationLists");
}
}
}

View File

@@ -566,6 +566,86 @@ namespace ScadaLink.ConfigurationDatabase.Migrations
b.ToTable("InstanceConnectionBindings");
});
modelBuilder.Entity("ScadaLink.Commons.Entities.Notifications.Notification", b =>
{
b.Property<string>("NotificationId")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<string>("Body")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<DateTimeOffset>("CreatedAt")
.HasColumnType("datetimeoffset");
b.Property<DateTimeOffset?>("DeliveredAt")
.HasColumnType("datetimeoffset");
b.Property<DateTimeOffset?>("LastAttemptAt")
.HasColumnType("datetimeoffset");
b.Property<string>("LastError")
.HasMaxLength(4000)
.HasColumnType("nvarchar(4000)");
b.Property<string>("ListName")
.IsRequired()
.HasMaxLength(200)
.HasColumnType("nvarchar(200)");
b.Property<DateTimeOffset?>("NextAttemptAt")
.HasColumnType("datetimeoffset");
b.Property<string>("ResolvedTargets")
.HasColumnType("nvarchar(max)");
b.Property<int>("RetryCount")
.HasColumnType("int");
b.Property<DateTimeOffset>("SiteEnqueuedAt")
.HasColumnType("datetimeoffset");
b.Property<string>("SourceInstanceId")
.HasMaxLength(200)
.HasColumnType("nvarchar(200)");
b.Property<string>("SourceScript")
.HasMaxLength(200)
.HasColumnType("nvarchar(200)");
b.Property<string>("SourceSiteId")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.Property<string>("Status")
.IsRequired()
.HasMaxLength(32)
.HasColumnType("nvarchar(32)");
b.Property<string>("Subject")
.IsRequired()
.HasMaxLength(1000)
.HasColumnType("nvarchar(1000)");
b.Property<string>("Type")
.IsRequired()
.HasMaxLength(32)
.HasColumnType("nvarchar(32)");
b.Property<string>("TypeData")
.HasColumnType("nvarchar(max)");
b.HasKey("NotificationId");
b.HasIndex("SourceSiteId", "CreatedAt");
b.HasIndex("Status", "NextAttemptAt");
b.ToTable("Notifications");
});
modelBuilder.Entity("ScadaLink.Commons.Entities.Notifications.NotificationList", b =>
{
b.Property<int>("Id")
@@ -579,6 +659,11 @@ namespace ScadaLink.ConfigurationDatabase.Migrations
.HasMaxLength(200)
.HasColumnType("nvarchar(200)");
b.Property<string>("Type")
.IsRequired()
.HasMaxLength(32)
.HasColumnType("nvarchar(32)");
b.HasKey("Id");
b.HasIndex("Name")