444 lines
20 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|