using System;
using Microsoft.EntityFrameworkCore.Migrations;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
#nullable disable
namespace Nexus.Api.Migrations
{
///
public partial class InitialCreate : Migration
{
///
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "Activity",
columns: table => new
{
Id = table.Column(type: "bigint", nullable: false)
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
Type = table.Column(type: "text", nullable: false),
Message = table.Column(type: "character varying(1000)", maxLength: 1000, nullable: false),
CreatedAt = table.Column(type: "timestamp with time zone", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Activity", x => x.Id);
});
migrationBuilder.CreateTable(
name: "Projects",
columns: table => new
{
Id = table.Column(type: "uuid", nullable: false),
Name = table.Column(type: "character varying(160)", maxLength: 160, nullable: false),
Description = table.Column(type: "text", nullable: false),
Progress = table.Column(type: "integer", nullable: false),
Status = table.Column(type: "integer", nullable: false),
UpdatedAt = table.Column(type: "timestamp with time zone", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Projects", x => x.Id);
});
migrationBuilder.CreateTable(
name: "Tasks",
columns: table => new
{
Id = table.Column(type: "uuid", nullable: false),
Title = table.Column(type: "character varying(240)", maxLength: 240, nullable: false),
State = table.Column(type: "text", nullable: false),
Priority = table.Column(type: "text", nullable: false),
ProjectId = table.Column(type: "uuid", nullable: true),
UpdatedAt = table.Column(type: "timestamp with time zone", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Tasks", x => x.Id);
});
migrationBuilder.CreateTable(
name: "Users",
columns: table => new
{
Id = table.Column(type: "uuid", nullable: false),
Email = table.Column(type: "character varying(120)", maxLength: 120, nullable: false),
NormalizedEmail = table.Column(type: "character varying(120)", maxLength: 120, nullable: false),
DisplayName = table.Column(type: "character varying(100)", maxLength: 100, nullable: false),
PasswordHash = table.Column(type: "text", nullable: false),
Role = table.Column(type: "text", nullable: false),
CreatedAt = table.Column(type: "timestamp with time zone", nullable: false),
UpdatedAt = table.Column(type: "timestamp with time zone", nullable: false),
LastLoginAt = table.Column(type: "timestamp with time zone", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_Users", x => x.Id);
});
migrationBuilder.CreateTable(
name: "RefreshTokens",
columns: table => new
{
Id = table.Column(type: "uuid", nullable: false),
UserId = table.Column(type: "uuid", nullable: false),
TokenHash = table.Column(type: "character varying(64)", maxLength: 64, nullable: false),
FamilyId = table.Column(type: "uuid", nullable: false),
ExpiresAt = table.Column(type: "timestamp with time zone", nullable: false),
CreatedAt = table.Column(type: "timestamp with time zone", nullable: false),
RevokedAt = table.Column(type: "timestamp with time zone", nullable: true),
ReplacedByTokenHash = table.Column(type: "character varying(64)", maxLength: 64, nullable: true),
ConcurrencyStamp = table.Column(type: "uuid", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_RefreshTokens", x => x.Id);
table.ForeignKey(
name: "FK_RefreshTokens_Users_UserId",
column: x => x.UserId,
principalTable: "Users",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateIndex(
name: "IX_RefreshTokens_TokenHash",
table: "RefreshTokens",
column: "TokenHash",
unique: true);
migrationBuilder.CreateIndex(
name: "IX_RefreshTokens_UserId_FamilyId",
table: "RefreshTokens",
columns: new[] { "UserId", "FamilyId" });
migrationBuilder.CreateIndex(
name: "IX_Users_NormalizedEmail",
table: "Users",
column: "NormalizedEmail",
unique: true);
}
///
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "Activity");
migrationBuilder.DropTable(
name: "Projects");
migrationBuilder.DropTable(
name: "RefreshTokens");
migrationBuilder.DropTable(
name: "Tasks");
migrationBuilder.DropTable(
name: "Users");
}
}
}