39 lines
1.3 KiB
PL/PgSQL
39 lines
1.3 KiB
PL/PgSQL
-- 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;
|