-- CreateEnum CREATE TYPE "LoginActivityStatus" AS ENUM ('SUCCESS', 'FAILURE'); -- CreateEnum CREATE TYPE "LoginFailureReason" AS ENUM ('MISSING_CREDENTIALS', 'INVALID_CREDENTIALS', 'WRONG_PASSWORD', 'ACCOUNT_LOCKED', 'NOT_ACTIVATED', 'NOT_ALLOWED', 'UNKNOWN'); -- AlterTable ALTER TABLE "User" ADD COLUMN "lastLoginAt" TIMESTAMP(3); -- CreateTable CREATE TABLE "LoginActivity" ( "id" TEXT NOT NULL, "userId" TEXT NOT NULL, "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "activity" TEXT NOT NULL, "status" "LoginActivityStatus" NOT NULL DEFAULT 'SUCCESS', "failureReason" "LoginFailureReason", CONSTRAINT "LoginActivity_pkey" PRIMARY KEY ("id") ); -- CreateIndex CREATE INDEX "LoginActivity_userId_createdAt_idx" ON "LoginActivity"("userId", "createdAt"); -- CreateIndex CREATE INDEX "LoginActivity_createdAt_idx" ON "LoginActivity"("createdAt"); -- CreateIndex CREATE INDEX "LoginActivity_activity_idx" ON "LoginActivity"("activity"); -- AddForeignKey ALTER TABLE "LoginActivity" ADD CONSTRAINT "LoginActivity_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;