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

444 lines
20 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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);
}
}
}