Fuenf Migrationen verwiesen fuer die Herkunft der Trigramm-Indizes auf prisma/sql/suche.sql. Diese Datei gibt es nicht; sie heisst volltextsuche.sql. Der Hinweis steht genau dort, wo ihn jemand liest, der die naechste Migration erzeugt - ein falscher Pfad schickt ihn ins Leere. Dazu ein Verweis auf das Werkzeug aus #24: "npm run db:migration" nimmt die Zeilen inzwischen selbst heraus, die Kommentare rieten aber weiterhin nur zum Nachsehen. Geprueft, bevor die Dateien angefasst wurden: Prisma speichert zwar eine Pruefsumme je Migration, "migrate deploy" verifiziert sie fuer bereits angewendete Migrationen aber nicht. Nachgestellt mit genau der Lage, die auch auf dem Server entsteht - Pruefsumme in der Datenbank weicht ab, "migrate status" und "migrate deploy" bleiben zufrieden. Refs #25
69 lines
2.3 KiB
SQL
69 lines
2.3 KiB
SQL
-- Passkeys (WebAuthn/FIDO2) als zweiter Anmeldeweg.
|
|
--
|
|
-- ACHTUNG beim Erzeugen weiterer Migrationen: "prisma migrate diff" wollte
|
|
-- hier zusaetzlich die Trigramm-Indizes "dokument_absender_trgm" und
|
|
-- "vorgang_titel_trgm" loeschen. Die stammen aus prisma/sql/volltextsuche.sql und
|
|
-- sind Prisma unbekannt - ein DROP haette die unscharfe Suche stillgelegt,
|
|
-- ohne dass irgendetwas fehlgeschlagen waere. Solche Zeilen gehoeren aus
|
|
-- jeder erzeugten Migration entfernt.
|
|
-- Kuenftig nimmt "npm run db:migration" diese Zeilen selbst heraus.
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "PasskeyAnfrageArt" AS ENUM ('REGISTRIERUNG', 'ANMELDUNG');
|
|
|
|
-- AlterEnum
|
|
-- This migration adds more than one value to an enum.
|
|
-- With PostgreSQL versions 11 and earlier, this is not possible
|
|
-- in a single migration. This can be worked around by creating
|
|
-- multiple migrations, each migration adding only one value to
|
|
-- the enum.
|
|
|
|
|
|
ALTER TYPE "AuditAktion" ADD VALUE 'PASSKEY_REGISTRIERT';
|
|
ALTER TYPE "AuditAktion" ADD VALUE 'PASSKEY_ENTFERNT';
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "passkey" (
|
|
"id" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"credentialId" TEXT NOT NULL,
|
|
"publicKey" BYTEA NOT NULL,
|
|
"counter" BIGINT NOT NULL DEFAULT 0,
|
|
"transports" TEXT[] DEFAULT ARRAY[]::TEXT[],
|
|
"name" TEXT NOT NULL,
|
|
"geraeteArt" TEXT,
|
|
"gesichert" BOOLEAN NOT NULL DEFAULT false,
|
|
"erstelltAm" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"zuletztBenutztAm" TIMESTAMP(3),
|
|
|
|
CONSTRAINT "passkey_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "passkey_anfrage" (
|
|
"id" TEXT NOT NULL,
|
|
"challenge" TEXT NOT NULL,
|
|
"art" "PasskeyAnfrageArt" NOT NULL,
|
|
"userId" TEXT,
|
|
"ablaufAm" TIMESTAMP(3) NOT NULL,
|
|
"erstelltAm" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "passkey_anfrage_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "passkey_credentialId_key" ON "passkey"("credentialId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "passkey_userId_idx" ON "passkey"("userId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "passkey_anfrage_challenge_key" ON "passkey_anfrage"("challenge");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "passkey_anfrage_ablaufAm_idx" ON "passkey_anfrage"("ablaufAm");
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "passkey" ADD CONSTRAINT "passkey_userId_fkey" FOREIGN KEY ("userId") REFERENCES "benutzer"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|