using System; using Microsoft.EntityFrameworkCore.Migrations; #nullable disable namespace InboxIntel.Infrastructure.Migrations { /// public partial class FeatureFlagsAndUserSettings : Migration { /// protected override void Up(MigrationBuilder migrationBuilder) { migrationBuilder.CreateTable( name: "feature_flags", columns: table => new { Key = table.Column(type: "character varying(128)", maxLength: 128, nullable: false), Enabled = table.Column(type: "boolean", nullable: false), UserOverridable = table.Column(type: "boolean", nullable: false), Description = table.Column(type: "text", nullable: true), CreatedAtUtc = table.Column(type: "timestamp with time zone", nullable: false), UpdatedAtUtc = table.Column(type: "timestamp with time zone", nullable: true) }, constraints: table => { table.PrimaryKey("PK_feature_flags", x => x.Key); }); migrationBuilder.CreateTable( name: "user_settings", columns: table => new { UserId = table.Column(type: "uuid", nullable: false), Theme = table.Column(type: "text", nullable: false), AiOptIn = table.Column(type: "boolean", nullable: false), PreferencesJson = table.Column(type: "text", nullable: true), CreatedAtUtc = table.Column(type: "timestamp with time zone", nullable: false), UpdatedAtUtc = table.Column(type: "timestamp with time zone", nullable: true) }, constraints: table => { table.PrimaryKey("PK_user_settings", x => x.UserId); table.ForeignKey( name: "FK_user_settings_users_UserId", column: x => x.UserId, principalTable: "users", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); // Behaviour-preserving defaults (docs/discovery/multi-provider/04): ai.enabled on // (AI availability still requires Ai:Mode + provider), Google on, others off. migrationBuilder.Sql(""" INSERT INTO feature_flags ("Key", "Enabled", "UserOverridable", "Description", "CreatedAtUtc", "UpdatedAtUtc") VALUES ('ai.enabled', TRUE, TRUE, 'Master AI switch: off hides AI for everyone', NOW(), NOW()), ('provider.google', TRUE, FALSE, 'Google/Gmail provider', NOW(), NOW()), ('provider.microsoft', FALSE, FALSE, 'Microsoft/Outlook provider (future)', NOW(), NOW()), ('provider.imap', FALSE, FALSE, 'IMAP provider (future)', NOW(), NOW()) ON CONFLICT ("Key") DO NOTHING; """); } /// protected override void Down(MigrationBuilder migrationBuilder) { migrationBuilder.DropTable( name: "feature_flags"); migrationBuilder.DropTable( name: "user_settings"); } } }