feat(dashboard): add owner-scoped layouts with atomic revisions

This commit is contained in:
cesnimda
2026-10-21 20:59:58 +02:00
parent 421f902d21
commit 5edbe59692
11 changed files with 539 additions and 0 deletions
@@ -320,6 +320,7 @@ public static class StartupInitializationExtensions
EnsureColumn(conn, "AspNetUsers", "StripeLastEventCreatedUtc", "ALTER TABLE AspNetUsers ADD COLUMN StripeLastEventCreatedUtc TEXT NULL;");
// UiLanguage is migration-owned (AddUiLanguagePreference). Adding it here before
// the per-migration loop makes a fresh database fail when that migration runs.
// DashboardLayoutJson/Revision likewise belong to AddDashboardLayoutPreference.
static void ReconcileGmailConnectionColumns(DbConnection c)
{
@@ -539,6 +540,7 @@ public static class StartupInitializationExtensions
EnsureMySqlColumn(conn, "AspNetUsers", "StripeLastEventCreatedUtc", "ALTER TABLE `AspNetUsers` ADD COLUMN `StripeLastEventCreatedUtc` datetime(6) NULL;");
// UiLanguage is migration-owned; the final reconciliation pass observes it
// after AddUiLanguagePreference instead of racing the migration.
// DashboardLayoutJson/Revision are also migration-owned for both providers.
// RuleSettings is MIGRATION-owned — the initial migration creates it. The reconciler
// used to create it too, which made a clean install fail with "Table 'RuleSettings'