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