using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace VigilCareRecordsAPI.Data.Migrations
{
///
public partial class AddRefreshTokensAndAuthAudit : Migration
{
///
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "auth_audit_events",
columns: table => new
{
id = table.Column(type: "uuid", nullable: false, defaultValueSql: "gen_random_uuid()"),
user_id = table.Column(type: "uuid", nullable: false),
event_type = table.Column(type: "character varying(30)", maxLength: 30, nullable: false),
occurred_at = table.Column(type: "timestamp with time zone", nullable: false, defaultValueSql: "NOW()"),
metadata_json = table.Column(type: "jsonb", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_auth_audit_events", x => x.id);
table.CheckConstraint("chk_auth_audit_events_event_type", "event_type IN ('USER_LOGOUT', 'TOKEN_REFRESHED')");
table.ForeignKey(
name: "FK_auth_audit_events_users_user_id",
column: x => x.user_id,
principalTable: "users",
principalColumn: "id",
onDelete: ReferentialAction.Restrict);
});
migrationBuilder.CreateTable(
name: "refresh_tokens",
columns: table => new
{
id = table.Column(type: "uuid", nullable: false, defaultValueSql: "gen_random_uuid()"),
user_id = table.Column(type: "uuid", nullable: false),
token_hash = table.Column(type: "character varying(64)", maxLength: 64, nullable: false),
expires_at = table.Column(type: "timestamp with time zone", nullable: false),
revoked_at = table.Column(type: "timestamp with time zone", nullable: true),
replaced_by_token_id = table.Column(type: "uuid", nullable: true),
created_at = table.Column(type: "timestamp with time zone", nullable: false, defaultValueSql: "NOW()")
},
constraints: table =>
{
table.PrimaryKey("PK_refresh_tokens", x => x.id);
table.ForeignKey(
name: "FK_refresh_tokens_refresh_tokens_replaced_by_token_id",
column: x => x.replaced_by_token_id,
principalTable: "refresh_tokens",
principalColumn: "id",
onDelete: ReferentialAction.SetNull);
table.ForeignKey(
name: "FK_refresh_tokens_users_user_id",
column: x => x.user_id,
principalTable: "users",
principalColumn: "id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateIndex(
name: "IX_auth_audit_events_user_id_occurred_at",
table: "auth_audit_events",
columns: new[] { "user_id", "occurred_at" });
migrationBuilder.CreateIndex(
name: "IX_refresh_tokens_replaced_by_token_id",
table: "refresh_tokens",
column: "replaced_by_token_id");
migrationBuilder.CreateIndex(
name: "IX_refresh_tokens_token_hash",
table: "refresh_tokens",
column: "token_hash",
unique: true);
migrationBuilder.CreateIndex(
name: "IX_refresh_tokens_user_id_revoked_at",
table: "refresh_tokens",
columns: new[] { "user_id", "revoked_at" });
}
///
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "auth_audit_events");
migrationBuilder.DropTable(
name: "refresh_tokens");
}
}
}