-- QR Master, Deploy 27.07.2026 - nur die Statements, die ausgefuehrt werden muessen.
-- Alle idempotent, ein zweiter Lauf schadet nicht.
-- Danach zwingend: npx prisma generate

BEGIN;

CREATE INDEX IF NOT EXISTS "QRCode_userId_type_status_idx"
  ON "QRCode" ("userId", "type", "status");

ALTER TABLE "User" ADD COLUMN IF NOT EXISTS "limitReachedNudgeSentAt" TIMESTAMP(3);
ALTER TABLE "User" ADD COLUMN IF NOT EXISTS "firstScanNudgeSentAt"    TIMESTAMP(3);

CREATE INDEX IF NOT EXISTS "User_firstScanAt_firstScanNudgeSentAt_idx"
  ON "User" ("firstScanAt", "firstScanNudgeSentAt");

-- Schuetzt Bestandsnutzer: ohne diese Zeile geht die "erster Scan"-Mail beim
-- ersten Cron-Lauf an jeden Nutzer mit Scan-Historie.
UPDATE "User"
SET "firstScanNudgeSentAt" = now()
WHERE "firstScanAt" IS NOT NULL
  AND "firstScanAt" < now() - interval '7 days';

CREATE TABLE IF NOT EXISTS "QRDesignPreset" (
  "id"        TEXT PRIMARY KEY,
  "userId"    TEXT NOT NULL REFERENCES "User"("id") ON DELETE CASCADE,
  "name"      TEXT NOT NULL,
  "style"     JSONB NOT NULL,
  "createdAt" TIMESTAMP(3) NOT NULL DEFAULT now(),
  "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT now()
);

CREATE INDEX IF NOT EXISTS "QRDesignPreset_userId_idx"
  ON "QRDesignPreset" ("userId");

CREATE UNIQUE INDEX IF NOT EXISTS "QRDesignPreset_userId_name_key"
  ON "QRDesignPreset" ("userId", "name");

COMMIT;
