using Microsoft.EntityFrameworkCore.Migrations; #nullable disable namespace API.Migrations { /// public partial class ReplaceIsAdminWithRoles : Migration { /// protected override void Up(MigrationBuilder migrationBuilder) { migrationBuilder.Sql( """ DO $$ DECLARE admin_role_id uuid; BEGIN SELECT "Id" INTO admin_role_id FROM "Roles" WHERE "NormalizedName" = 'ADMIN' LIMIT 1; IF admin_role_id IS NULL THEN admin_role_id := '2b34c0e2-9d53-4d79-bb85-bff03ce9e1ee'; INSERT INTO "Roles" ("Id", "Name", "NormalizedName", "ConcurrencyStamp") VALUES (admin_role_id, 'admin', 'ADMIN', NULL) ON CONFLICT ("Id") DO NOTHING; SELECT "Id" INTO admin_role_id FROM "Roles" WHERE "NormalizedName" = 'ADMIN' LIMIT 1; END IF; INSERT INTO "UserRoles" ("UserId", "RoleId") SELECT u."Id", admin_role_id FROM "Users" u WHERE u."IsAdmin" = TRUE AND admin_role_id IS NOT NULL AND NOT EXISTS ( SELECT 1 FROM "UserRoles" ur WHERE ur."UserId" = u."Id" AND ur."RoleId" = admin_role_id ); END $$; """); migrationBuilder.DropColumn( name: "IsAdmin", table: "Users"); } /// protected override void Down(MigrationBuilder migrationBuilder) { migrationBuilder.AddColumn( name: "IsAdmin", table: "Users", type: "boolean", nullable: false, defaultValue: false); migrationBuilder.Sql( """ UPDATE "Users" u SET "IsAdmin" = TRUE WHERE EXISTS ( SELECT 1 FROM "UserRoles" ur INNER JOIN "Roles" r ON r."Id" = ur."RoleId" WHERE ur."UserId" = u."Id" AND r."NormalizedName" = 'ADMIN' ); """); } } }