Completes master-cms-module: Build & Test, docs, and appsettings

Finishes the master-cms-module feature (Units 1-4): runs Build and
Test across master-backend, slave-availability-extension and
frontend-cms-page, fixes a missing Availability EF migration for
MasterRegistration and a TanStack Query v5 mutation-callback type
break, adds the missing MasterModule appsettings section, and
documents the module in README.md. Also seeds a tech-debt-backlog
feature to track dead config and pre-existing/introduced frontend
lint findings for later cleanup.
This commit is contained in:
2026-07-01 23:09:15 +02:00
parent 488ab821a7
commit 8072025e0b
20 changed files with 689 additions and 79 deletions
@@ -20,6 +20,11 @@
"CircuitBreakerSeconds": 30,
"StatusCacheSeconds": 1
},
"MasterModule": {
"IntegrityCheckIntervalMinutes": 60,
"HttpTimeoutSeconds": 10,
"MasterUrl": "https://localhost:7221"
},
"Cors": {
"AllowedOrigins": [
"http://localhost:5173",
+5
View File
@@ -20,6 +20,11 @@
"CircuitBreakerSeconds": 30,
"StatusCacheSeconds": 1
},
"MasterModule": {
"IntegrityCheckIntervalMinutes": 60,
"HttpTimeoutSeconds": 10,
"MasterUrl": "<public-url-of-this-master-instance>"
},
"Cors": {
"AllowedOrigins": []
},
@@ -0,0 +1,57 @@
// <auto-generated />
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using SlpModularCms.Modules.Availability.Data;
#nullable disable
namespace SlpModularCms.Modules.Availability.Migrations
{
[DbContext(typeof(AvailabilityDbContext))]
[Migration("20260701200414_InitialCreate")]
partial class InitialCreate
{
/// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "10.0.9")
.HasAnnotation("Relational:MaxIdentifierLength", 128);
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
modelBuilder.Entity("SlpModularCms.Modules.Availability.Data.Entities.MasterRegistration", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("ApiKey")
.IsRequired()
.HasMaxLength(2000)
.HasColumnType("nvarchar(2000)");
b.Property<DateTimeOffset?>("LastContactedAt")
.HasColumnType("datetimeoffset");
b.Property<string>("MasterUrl")
.IsRequired()
.HasMaxLength(500)
.HasColumnType("nvarchar(500)");
b.Property<DateTimeOffset>("RegisteredAt")
.HasColumnType("datetimeoffset");
b.HasKey("Id");
b.ToTable("AvailabilityMasterRegistrations", (string)null);
});
#pragma warning restore 612, 618
}
}
}
@@ -0,0 +1,37 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace SlpModularCms.Modules.Availability.Migrations
{
/// <inheritdoc />
public partial class InitialCreate : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "AvailabilityMasterRegistrations",
columns: table => new
{
Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
MasterUrl = table.Column<string>(type: "nvarchar(500)", maxLength: 500, nullable: false),
ApiKey = table.Column<string>(type: "nvarchar(2000)", maxLength: 2000, nullable: false),
RegisteredAt = table.Column<DateTimeOffset>(type: "datetimeoffset", nullable: false),
LastContactedAt = table.Column<DateTimeOffset>(type: "datetimeoffset", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_AvailabilityMasterRegistrations", x => x.Id);
});
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "AvailabilityMasterRegistrations");
}
}
}
@@ -0,0 +1,54 @@
// <auto-generated />
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using SlpModularCms.Modules.Availability.Data;
#nullable disable
namespace SlpModularCms.Modules.Availability.Migrations
{
[DbContext(typeof(AvailabilityDbContext))]
partial class AvailabilityDbContextModelSnapshot : ModelSnapshot
{
protected override void BuildModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "10.0.9")
.HasAnnotation("Relational:MaxIdentifierLength", 128);
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
modelBuilder.Entity("SlpModularCms.Modules.Availability.Data.Entities.MasterRegistration", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("ApiKey")
.IsRequired()
.HasMaxLength(2000)
.HasColumnType("nvarchar(2000)");
b.Property<DateTimeOffset?>("LastContactedAt")
.HasColumnType("datetimeoffset");
b.Property<string>("MasterUrl")
.IsRequired()
.HasMaxLength(500)
.HasColumnType("nvarchar(500)");
b.Property<DateTimeOffset>("RegisteredAt")
.HasColumnType("datetimeoffset");
b.HasKey("Id");
b.ToTable("AvailabilityMasterRegistrations", (string)null);
});
#pragma warning restore 612, 618
}
}
}