using Microsoft.EntityFrameworkCore.Migrations; #nullable disable #pragma warning disable CA1814 // Prefer jagged arrays over multidimensional namespace ManagerService.Migrations { /// public partial class AlignSubscriptionPlansWithPricing : Migration { /// protected override void Up(MigrationBuilder migrationBuilder) { // Ordre imposé : les nouveaux plans d'abord, le repointage ensuite, les // suppressions en dernier. EF avait scaffoldé les DeleteData en tête, ce qui // aurait buté sur la clé étrangère Instances.SubscriptionPlanId — ou laissé // des instances sans plan, donc à quotas nuls, donc sans IA ni stockage. migrationBuilder.InsertData( table: "SubscriptionPlans", columns: new[] { "Id", "AiTokensPerMonth", "HasAdvancedStats", "HasStats", "Name", "StatsHistoryDays", "StorageQuotaBytes" }, values: new object[,] { { "plan-enterprise", 9223372036854775807L, true, true, "Enterprise", 395, 0L }, { "plan-pro", 0L, false, true, "Pro", 30, 16106127360L } }); migrationBuilder.UpdateData( table: "SubscriptionPlans", keyColumn: "Id", keyValue: "plan-essentiel", columns: new[] { "AiTokensPerMonth", "StatsHistoryDays" }, values: new object[] { 0L, 30 }); // « Standard » devient « Pro » : même offre, nom aligné sur la grille. migrationBuilder.Sql( @"UPDATE ""Instances"" SET ""SubscriptionPlanId"" = 'plan-pro' WHERE ""SubscriptionPlanId"" = 'plan-standard';"); // « Starter » n'a aucun équivalent commercial et donnait 0 jeton : les // instances qui y pointaient sont détachées plutôt que rangées dans une // offre qu'elles n'ont pas achetée. Un plan nul est visible à l'écran, // un mauvais plan ne l'est pas. migrationBuilder.Sql( @"UPDATE ""Instances"" SET ""SubscriptionPlanId"" = NULL WHERE ""SubscriptionPlanId"" = 'plan-starter';"); migrationBuilder.DeleteData( table: "SubscriptionPlans", keyColumn: "Id", keyValue: "plan-standard"); migrationBuilder.DeleteData( table: "SubscriptionPlans", keyColumn: "Id", keyValue: "plan-starter"); } /// protected override void Down(MigrationBuilder migrationBuilder) { migrationBuilder.DeleteData( table: "SubscriptionPlans", keyColumn: "Id", keyValue: "plan-enterprise"); migrationBuilder.DeleteData( table: "SubscriptionPlans", keyColumn: "Id", keyValue: "plan-pro"); migrationBuilder.UpdateData( table: "SubscriptionPlans", keyColumn: "Id", keyValue: "plan-essentiel", columns: new[] { "AiTokensPerMonth", "StatsHistoryDays" }, values: new object[] { 500000L, 395 }); migrationBuilder.InsertData( table: "SubscriptionPlans", columns: new[] { "Id", "AiTokensPerMonth", "HasAdvancedStats", "HasStats", "Name", "StatsHistoryDays", "StorageQuotaBytes" }, values: new object[,] { { "plan-standard", 5000000L, false, true, "Standard", 395, 10737418240L }, { "plan-starter", 0L, false, false, "Starter", 30, 1073741824L } }); // Repointage inverse. Les instances détachées de plan-starter ne sont pas // rattachées : rien ne dit lesquelles l'étaient. migrationBuilder.Sql( @"UPDATE ""Instances"" SET ""SubscriptionPlanId"" = 'plan-standard' WHERE ""SubscriptionPlanId"" = 'plan-pro';"); } } }