using System; using Microsoft.EntityFrameworkCore.Migrations; using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; #nullable disable #pragma warning disable CA1814 // Prefer jagged arrays over multidimensional namespace Modules.User.Database.Migrations { /// public partial class M005 : Migration { /// protected override void Up(MigrationBuilder migrationBuilder) { migrationBuilder.AlterColumn( name: "AvatarId", table: "Users", type: "character varying(128)", maxLength: 128, nullable: true, oldClrType: typeof(string), oldType: "text", oldNullable: true); migrationBuilder.AddColumn( name: "xmin", table: "Users", type: "xid", rowVersion: true, nullable: false, defaultValue: 0u); migrationBuilder.AlterColumn( name: "ExpiredDate", table: "Sessions", type: "timestamp with time zone", nullable: false, defaultValueSql: "now()", oldClrType: typeof(DateTime), oldType: "timestamp with time zone", oldDefaultValueSql: "'0001-01-01 00:00:00+00'"); migrationBuilder.AddColumn( name: "xmin", table: "Sessions", type: "xid", rowVersion: true, nullable: false, defaultValue: 0u); migrationBuilder.AlterColumn( name: "HashedPassword", table: "Accounts", type: "character varying(256)", maxLength: 256, nullable: false, oldClrType: typeof(string), oldType: "text"); migrationBuilder.AddColumn( name: "xmin", table: "Accounts", type: "xid", rowVersion: true, nullable: false, defaultValue: 0u); migrationBuilder.CreateTable( name: "AccountBans", columns: table => new { Id = table.Column(type: "uuid", nullable: false), AccountId = table.Column(type: "uuid", nullable: false), Reason = table.Column(type: "character varying(128)", maxLength: 128, nullable: false), BanDate = table.Column(type: "timestamp with time zone", nullable: false, defaultValueSql: "now()"), IssuerId = table.Column(type: "uuid", nullable: false), ReleaseDate = table.Column(type: "timestamp with time zone", nullable: true), UnbanIssuerId = table.Column(type: "uuid", nullable: true), UnbanDate = table.Column(type: "timestamp with time zone", nullable: true), UnbanReason = table.Column(type: "character varying(128)", maxLength: 128, nullable: true), Deleted = table.Column(type: "boolean", nullable: false), xmin = table.Column(type: "xid", rowVersion: true, nullable: false) }, constraints: table => { table.PrimaryKey("PK_AccountBans", x => x.Id); table.ForeignKey( name: "FK_AccountBans_Accounts_AccountId", column: x => x.AccountId, principalTable: "Accounts", principalColumn: "Id", onDelete: ReferentialAction.Restrict); }); migrationBuilder.CreateTable( name: "Permissions", columns: table => new { Id = table.Column(type: "integer", nullable: false) .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), Code = table.Column(type: "character varying(128)", maxLength: 128, nullable: false), Name = table.Column(type: "character varying(64)", maxLength: 64, nullable: false), Description = table.Column(type: "character varying(512)", maxLength: 512, nullable: true), CreationDate = table.Column(type: "timestamp with time zone", nullable: false, defaultValueSql: "now()"), Deleted = table.Column(type: "boolean", nullable: false), xmin = table.Column(type: "xid", rowVersion: true, nullable: false) }, constraints: table => { table.PrimaryKey("PK_Permissions", x => x.Id); }); migrationBuilder.CreateTable( name: "Roles", columns: table => new { Id = table.Column(type: "integer", nullable: false) .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), Code = table.Column(type: "character varying(64)", maxLength: 64, nullable: false), Name = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), Description = table.Column(type: "character varying(512)", maxLength: 512, nullable: true), CreationDate = table.Column(type: "timestamp with time zone", nullable: false, defaultValueSql: "now()"), Deleted = table.Column(type: "boolean", nullable: false), xmin = table.Column(type: "xid", rowVersion: true, nullable: false) }, constraints: table => { table.PrimaryKey("PK_Roles", x => x.Id); }); migrationBuilder.CreateTable( name: "AccountPermissions", columns: table => new { Id = table.Column(type: "bigint", nullable: false) .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), AccountId = table.Column(type: "uuid", nullable: false), PermissionId = table.Column(type: "integer", nullable: false), IssuerId = table.Column(type: "uuid", nullable: false), GrantedAtUtc = table.Column(type: "timestamp with time zone", nullable: false, defaultValueSql: "now()"), GrantReason = table.Column(type: "character varying(128)", maxLength: 128, nullable: true), RevokedAtUtc = table.Column(type: "timestamp with time zone", nullable: true), RevokerId = table.Column(type: "uuid", nullable: true), RevokeReason = table.Column(type: "character varying(128)", maxLength: 128, nullable: true), xmin = table.Column(type: "xid", rowVersion: true, nullable: false) }, constraints: table => { table.PrimaryKey("PK_AccountPermissions", x => x.Id); table.ForeignKey( name: "FK_AccountPermissions_Accounts_AccountId", column: x => x.AccountId, principalTable: "Accounts", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_AccountPermissions_Permissions_PermissionId", column: x => x.PermissionId, principalTable: "Permissions", principalColumn: "Id", onDelete: ReferentialAction.Restrict); }); migrationBuilder.CreateTable( name: "AccountRoles", columns: table => new { Id = table.Column(type: "bigint", nullable: false) .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), AccountId = table.Column(type: "uuid", nullable: false), RoleId = table.Column(type: "integer", nullable: false), IssuerId = table.Column(type: "uuid", nullable: false), GrantedAtUtc = table.Column(type: "timestamp with time zone", nullable: false, defaultValueSql: "now()"), GrantReason = table.Column(type: "character varying(128)", maxLength: 128, nullable: true), RevokedAtUtc = table.Column(type: "timestamp with time zone", nullable: true), RevokerId = table.Column(type: "uuid", nullable: true), RevokeReason = table.Column(type: "character varying(128)", maxLength: 128, nullable: true), xmin = table.Column(type: "xid", rowVersion: true, nullable: false) }, constraints: table => { table.PrimaryKey("PK_AccountRoles", x => x.Id); table.ForeignKey( name: "FK_AccountRoles_Accounts_AccountId", column: x => x.AccountId, principalTable: "Accounts", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_AccountRoles_Roles_RoleId", column: x => x.RoleId, principalTable: "Roles", principalColumn: "Id", onDelete: ReferentialAction.Restrict); }); migrationBuilder.CreateTable( name: "RolePermissions", columns: table => new { RoleId = table.Column(type: "integer", nullable: false), PermissionId = table.Column(type: "integer", nullable: false) }, constraints: table => { table.PrimaryKey("PK_RolePermissions", x => new { x.RoleId, x.PermissionId }); table.ForeignKey( name: "FK_RolePermissions_Permissions_PermissionId", column: x => x.PermissionId, principalTable: "Permissions", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_RolePermissions_Roles_RoleId", column: x => x.RoleId, principalTable: "Roles", principalColumn: "Id", onDelete: ReferentialAction.Restrict); }); migrationBuilder.InsertData( table: "Permissions", columns: new[] { "Id", "Code", "Deleted", "Description", "Name" }, values: new object[,] { { 1, "permissions.view-details", false, null, "Просмотр разрешений" }, { 2, "permissions.manage", false, null, "Управление разрешениями" }, { 3, "users.view-profile", false, null, "Просмотр публичного профиля пользователя" }, { 4, "users.view-profile-detail", false, null, "Просмотр детального профиля пользователя" }, { 5, "users.view-list", false, null, "Просмотр списка пользователей" }, { 6, "users.manage", false, null, "Управление пользователями" }, { 7, "users.ban", false, null, "Бан пользователей" }, { 8, "users.unban", false, null, "Разбан пользователей" }, { 9, "users.manage-permissions", false, null, "Управление разрешениями пользователей" }, { 10, "lirary.read", false, null, "Чтение библиотеки" }, { 11, "lirary.vote", false, null, "Голосование" }, { 12, "lirary.manage", false, null, "Управление библиотекой" }, { 13, "lirary.dictionaries.read", false, null, "Чтение словарей" }, { 14, "lirary.dictionaries.manage", false, null, "Управление словарями" }, { 15, "lirary.views.read-count", false, null, "Чтение общего числа просмотров" }, { 16, "lirary.views.read-self", false, null, "Чтение своих просмотров" }, { 17, "lirary.views.manage-self", false, null, "Управление своими просмотрами" } }); migrationBuilder.InsertData( table: "Roles", columns: new[] { "Id", "Code", "Deleted", "Description", "Name" }, values: new object[,] { { 1, "admin", false, null, "Администратор" }, { 2, "visitor", false, null, "Посетитель" }, { 3, "moderator", false, null, "Модератор" }, { 4, "librarian", false, null, "Библиотекарь" } }); migrationBuilder.InsertData( table: "RolePermissions", columns: new[] { "PermissionId", "RoleId" }, values: new object[,] { { 1, 1 }, { 2, 1 }, { 3, 1 }, { 4, 1 }, { 5, 1 }, { 6, 1 }, { 7, 1 }, { 8, 1 }, { 9, 1 }, { 10, 1 }, { 11, 1 }, { 12, 1 }, { 13, 1 }, { 14, 1 }, { 15, 1 }, { 16, 1 }, { 17, 1 }, { 3, 2 }, { 10, 2 }, { 11, 2 }, { 15, 2 }, { 16, 2 }, { 17, 2 }, { 3, 3 }, { 4, 3 }, { 5, 3 }, { 7, 3 }, { 8, 3 }, { 10, 3 }, { 11, 3 }, { 15, 3 }, { 16, 3 }, { 17, 3 }, { 3, 4 }, { 10, 4 }, { 11, 4 }, { 12, 4 }, { 13, 4 }, { 14, 4 }, { 15, 4 }, { 16, 4 }, { 17, 4 } }); migrationBuilder.CreateIndex( name: "IX_AccountBans_AccountId_BanDate", table: "AccountBans", columns: new[] { "AccountId", "BanDate" }); migrationBuilder.CreateIndex( name: "IX_AccountBans_Active", table: "AccountBans", columns: new[] { "AccountId", "ReleaseDate" }, filter: "\"Deleted\" = false AND (\"ReleaseDate\" IS NULL OR \"ReleaseDate\" > now())"); migrationBuilder.CreateIndex( name: "IX_AccountPermissions_AccountId_GrantedAtUtc", table: "AccountPermissions", columns: new[] { "AccountId", "GrantedAtUtc" }); migrationBuilder.CreateIndex( name: "IX_AccountPermissions_IssuerId_GrantedAtUtc", table: "AccountPermissions", columns: new[] { "IssuerId", "GrantedAtUtc" }); migrationBuilder.CreateIndex( name: "IX_AccountPermissions_PermissionId", table: "AccountPermissions", column: "PermissionId"); migrationBuilder.CreateIndex( name: "UX_AccountPermissions_Active", table: "AccountPermissions", columns: new[] { "AccountId", "PermissionId" }, unique: true, filter: "\"RevokedAtUtc\" IS NULL"); migrationBuilder.CreateIndex( name: "IX_AccountRoles_AccountId_GrantedAtUtc", table: "AccountRoles", columns: new[] { "AccountId", "GrantedAtUtc" }); migrationBuilder.CreateIndex( name: "IX_AccountRoles_IssuerId_GrantedAtUtc", table: "AccountRoles", columns: new[] { "IssuerId", "GrantedAtUtc" }); migrationBuilder.CreateIndex( name: "IX_AccountRoles_RoleId", table: "AccountRoles", column: "RoleId"); migrationBuilder.CreateIndex( name: "UX_AccountRoles_Active", table: "AccountRoles", columns: new[] { "AccountId", "RoleId" }, unique: true, filter: "\"RevokedAtUtc\" IS NULL"); migrationBuilder.CreateIndex( name: "IX_Permissions_Code", table: "Permissions", column: "Code", unique: true); migrationBuilder.CreateIndex( name: "IX_RolePermissions_PermissionId", table: "RolePermissions", column: "PermissionId"); migrationBuilder.CreateIndex( name: "IX_Roles_Code", table: "Roles", column: "Code", unique: true); } /// protected override void Down(MigrationBuilder migrationBuilder) { migrationBuilder.DropTable( name: "AccountBans"); migrationBuilder.DropTable( name: "AccountPermissions"); migrationBuilder.DropTable( name: "AccountRoles"); migrationBuilder.DropTable( name: "RolePermissions"); migrationBuilder.DropTable( name: "Permissions"); migrationBuilder.DropTable( name: "Roles"); migrationBuilder.DropColumn( name: "xmin", table: "Users"); migrationBuilder.DropColumn( name: "xmin", table: "Sessions"); migrationBuilder.DropColumn( name: "xmin", table: "Accounts"); migrationBuilder.AlterColumn( name: "AvatarId", table: "Users", type: "text", nullable: true, oldClrType: typeof(string), oldType: "character varying(128)", oldMaxLength: 128, oldNullable: true); migrationBuilder.AlterColumn( name: "ExpiredDate", table: "Sessions", type: "timestamp with time zone", nullable: false, defaultValueSql: "'0001-01-01 00:00:00+00'", oldClrType: typeof(DateTime), oldType: "timestamp with time zone", oldDefaultValueSql: "now()"); migrationBuilder.AlterColumn( name: "HashedPassword", table: "Accounts", type: "text", nullable: false, oldClrType: typeof(string), oldType: "character varying(256)", oldMaxLength: 256); } } }