using System;
using Microsoft.EntityFrameworkCore.Migrations;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
#nullable disable
namespace Foxchat.Identity.Migrations
{
///
public partial class Init : Migration
{
///
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "accounts",
columns: table => new
{
id = table.Column(type: "uuid", nullable: false),
username = table.Column(type: "text", nullable: false),
email = table.Column(type: "text", nullable: false),
password = table.Column(type: "text", nullable: false),
role = table.Column(type: "integer", nullable: false),
avatar = table.Column(type: "text", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("pk_accounts", x => x.id);
});
migrationBuilder.CreateTable(
name: "chat_instances",
columns: table => new
{
id = table.Column(type: "uuid", nullable: false),
domain = table.Column(type: "text", nullable: false),
base_url = table.Column(type: "text", nullable: false),
public_key = table.Column(type: "text", nullable: false),
status = table.Column(type: "integer", nullable: false),
reason = table.Column(type: "text", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("pk_chat_instances", x => x.id);
});
migrationBuilder.CreateTable(
name: "instance",
columns: table => new
{
id = table.Column(type: "integer", nullable: false)
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
public_key = table.Column(type: "text", nullable: false),
private_key = table.Column(type: "text", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("pk_instance", x => x.id);
});
migrationBuilder.CreateTable(
name: "tokens",
columns: table => new
{
id = table.Column(type: "uuid", nullable: false),
account_id = table.Column(type: "uuid", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("pk_tokens", x => x.id);
table.ForeignKey(
name: "fk_tokens_accounts_account_id",
column: x => x.account_id,
principalTable: "accounts",
principalColumn: "id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "account_chat_instance",
columns: table => new
{
accounts_id = table.Column(type: "uuid", nullable: false),
chat_instances_id = table.Column(type: "uuid", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("pk_account_chat_instance", x => new { x.accounts_id, x.chat_instances_id });
table.ForeignKey(
name: "fk_account_chat_instance_accounts_accounts_id",
column: x => x.accounts_id,
principalTable: "accounts",
principalColumn: "id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "fk_account_chat_instance_chat_instances_chat_instances_id",
column: x => x.chat_instances_id,
principalTable: "chat_instances",
principalColumn: "id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "guild_accounts",
columns: table => new
{
chat_instance_id = table.Column(type: "uuid", nullable: false),
guild_id = table.Column(type: "text", nullable: false),
account_id = table.Column(type: "uuid", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("pk_guild_accounts", x => new { x.chat_instance_id, x.guild_id, x.account_id });
table.ForeignKey(
name: "fk_guild_accounts_accounts_account_id",
column: x => x.account_id,
principalTable: "accounts",
principalColumn: "id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "fk_guild_accounts_chat_instances_chat_instance_id",
column: x => x.chat_instance_id,
principalTable: "chat_instances",
principalColumn: "id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateIndex(
name: "ix_account_chat_instance_chat_instances_id",
table: "account_chat_instance",
column: "chat_instances_id");
migrationBuilder.CreateIndex(
name: "ix_accounts_email",
table: "accounts",
column: "email",
unique: true);
// EF Core doesn't support creating indexes on arbitrary expressions, so we have to create it manually.
migrationBuilder.Sql("CREATE UNIQUE INDEX ix_accounts_username ON accounts (lower(username))");
migrationBuilder.CreateIndex(
name: "ix_chat_instances_domain",
table: "chat_instances",
column: "domain",
unique: true);
migrationBuilder.CreateIndex(
name: "ix_guild_accounts_account_id",
table: "guild_accounts",
column: "account_id");
migrationBuilder.CreateIndex(
name: "ix_tokens_account_id",
table: "tokens",
column: "account_id");
}
///
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "account_chat_instance");
migrationBuilder.DropTable(
name: "guild_accounts");
migrationBuilder.DropTable(
name: "instance");
migrationBuilder.DropTable(
name: "tokens");
migrationBuilder.DropTable(
name: "chat_instances");
migrationBuilder.DropTable(
name: "accounts");
}
}
}