-- CreateTable CREATE TABLE "refresh_tokens" ( "id" SERIAL NOT NULL, "token" TEXT NOT NULL, "user_id" INTEGER NOT NULL, "username" TEXT NOT NULL, "role" "UserRole" NOT NULL, "ip" TEXT, "user_agent" TEXT, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "expires_at" TIMESTAMP(3) NOT NULL, "last_active_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT "refresh_tokens_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "token_invalidations" ( "id" SERIAL NOT NULL, "user_id" INTEGER NOT NULL, "session_id" TEXT, "invalidated_at" INTEGER NOT NULL, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT "token_invalidations_pkey" PRIMARY KEY ("id") ); -- CreateIndex CREATE UNIQUE INDEX "refresh_tokens_token_key" ON "refresh_tokens"("token"); -- CreateIndex CREATE INDEX "refresh_tokens_user_id_idx" ON "refresh_tokens"("user_id"); -- CreateIndex CREATE INDEX "refresh_tokens_token_idx" ON "refresh_tokens"("token"); -- CreateIndex CREATE INDEX "refresh_tokens_expires_at_idx" ON "refresh_tokens"("expires_at"); -- CreateIndex CREATE INDEX "token_invalidations_user_id_idx" ON "token_invalidations"("user_id"); -- CreateIndex CREATE INDEX "token_invalidations_session_id_idx" ON "token_invalidations"("session_id"); -- CreateIndex CREATE INDEX "token_invalidations_invalidated_at_idx" ON "token_invalidations"("invalidated_at"); -- CreateIndex CREATE UNIQUE INDEX "token_invalidations_user_id_session_id_key" ON "token_invalidations"("user_id", "session_id"); -- AddForeignKey ALTER TABLE "refresh_tokens" ADD CONSTRAINT "refresh_tokens_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "token_invalidations" ADD CONSTRAINT "token_invalidations_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;