MyBookmark/Modules.User.Database/Migrations/20250818214907_M005.cs

444 lines
20 KiB
C#

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
{
/// <inheritdoc />
public partial class M005 : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AlterColumn<string>(
name: "AvatarId",
table: "Users",
type: "character varying(128)",
maxLength: 128,
nullable: true,
oldClrType: typeof(string),
oldType: "text",
oldNullable: true);
migrationBuilder.AddColumn<uint>(
name: "xmin",
table: "Users",
type: "xid",
rowVersion: true,
nullable: false,
defaultValue: 0u);
migrationBuilder.AlterColumn<DateTime>(
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<uint>(
name: "xmin",
table: "Sessions",
type: "xid",
rowVersion: true,
nullable: false,
defaultValue: 0u);
migrationBuilder.AlterColumn<string>(
name: "HashedPassword",
table: "Accounts",
type: "character varying(256)",
maxLength: 256,
nullable: false,
oldClrType: typeof(string),
oldType: "text");
migrationBuilder.AddColumn<uint>(
name: "xmin",
table: "Accounts",
type: "xid",
rowVersion: true,
nullable: false,
defaultValue: 0u);
migrationBuilder.CreateTable(
name: "AccountBans",
columns: table => new
{
Id = table.Column<Guid>(type: "uuid", nullable: false),
AccountId = table.Column<Guid>(type: "uuid", nullable: false),
Reason = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: false),
BanDate = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, defaultValueSql: "now()"),
IssuerId = table.Column<Guid>(type: "uuid", nullable: false),
ReleaseDate = table.Column<DateTime>(type: "timestamp with time zone", nullable: true),
UnbanIssuerId = table.Column<Guid>(type: "uuid", nullable: true),
UnbanDate = table.Column<DateTime>(type: "timestamp with time zone", nullable: true),
UnbanReason = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: true),
Deleted = table.Column<bool>(type: "boolean", nullable: false),
xmin = table.Column<uint>(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<int>(type: "integer", nullable: false)
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
Code = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: false),
Name = table.Column<string>(type: "character varying(64)", maxLength: 64, nullable: false),
Description = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: true),
CreationDate = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, defaultValueSql: "now()"),
Deleted = table.Column<bool>(type: "boolean", nullable: false),
xmin = table.Column<uint>(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<int>(type: "integer", nullable: false)
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
Code = table.Column<string>(type: "character varying(64)", maxLength: 64, nullable: false),
Name = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false),
Description = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: true),
CreationDate = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, defaultValueSql: "now()"),
Deleted = table.Column<bool>(type: "boolean", nullable: false),
xmin = table.Column<uint>(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<long>(type: "bigint", nullable: false)
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
AccountId = table.Column<Guid>(type: "uuid", nullable: false),
PermissionId = table.Column<int>(type: "integer", nullable: false),
IssuerId = table.Column<Guid>(type: "uuid", nullable: false),
GrantedAtUtc = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, defaultValueSql: "now()"),
GrantReason = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: true),
RevokedAtUtc = table.Column<DateTime>(type: "timestamp with time zone", nullable: true),
RevokerId = table.Column<Guid>(type: "uuid", nullable: true),
RevokeReason = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: true),
xmin = table.Column<uint>(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<long>(type: "bigint", nullable: false)
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
AccountId = table.Column<Guid>(type: "uuid", nullable: false),
RoleId = table.Column<int>(type: "integer", nullable: false),
IssuerId = table.Column<Guid>(type: "uuid", nullable: false),
GrantedAtUtc = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, defaultValueSql: "now()"),
GrantReason = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: true),
RevokedAtUtc = table.Column<DateTime>(type: "timestamp with time zone", nullable: true),
RevokerId = table.Column<Guid>(type: "uuid", nullable: true),
RevokeReason = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: true),
xmin = table.Column<uint>(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<int>(type: "integer", nullable: false),
PermissionId = table.Column<int>(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);
}
/// <inheritdoc />
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<string>(
name: "AvatarId",
table: "Users",
type: "text",
nullable: true,
oldClrType: typeof(string),
oldType: "character varying(128)",
oldMaxLength: 128,
oldNullable: true);
migrationBuilder.AlterColumn<DateTime>(
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<string>(
name: "HashedPassword",
table: "Accounts",
type: "text",
nullable: false,
oldClrType: typeof(string),
oldType: "character varying(256)",
oldMaxLength: 256);
}
}
}