-- L15 Testphase & Onboarding: Testphasen-Lebenszyklus am Mandanten, Onboarding-Checkliste, -- Selbstanmeldungen (Plattform-Tabelle, ohne RLS) und Mandanten-Datenexporte (RLS). -- CreateEnum CREATE TYPE "TenantPlan" AS ENUM ('FULL', 'TRIAL'); -- AlterTable ALTER TABLE "tenant_settings" ADD COLUMN "onboarding" JSONB NOT NULL DEFAULT '{}'; -- AlterTable ALTER TABLE "tenants" ADD COLUMN "converted_at" TIMESTAMP(3), ADD COLUMN "deletion_due_at" TIMESTAMP(3), ADD COLUMN "plan" "TenantPlan" NOT NULL DEFAULT 'FULL', ADD COLUMN "read_only_since" TIMESTAMP(3), ADD COLUMN "trial_deleted_at" TIMESTAMP(3), ADD COLUMN "trial_deletion_notice_at" TIMESTAMP(3), ADD COLUMN "trial_ends_at" TIMESTAMP(3), ADD COLUMN "trial_expired_notice_at" TIMESTAMP(3), ADD COLUMN "trial_reminder_1_at" TIMESTAMP(3), ADD COLUMN "trial_reminder_3_at" TIMESTAMP(3), ADD COLUMN "trial_reminder_7_at" TIMESTAMP(3), ADD COLUMN "trial_source" TEXT, ADD COLUMN "trial_started_at" TIMESTAMP(3); -- CreateTable CREATE TABLE "trial_signups" ( "id" TEXT NOT NULL, "status" TEXT NOT NULL DEFAULT 'pending', "company_name" TEXT NOT NULL, "sector" TEXT, "company_size" TEXT, "admin_name" TEXT NOT NULL, "email" TEXT NOT NULL, "password_hash" TEXT NOT NULL, "trial_end_date" TEXT NOT NULL, "sample_data" BOOLEAN NOT NULL DEFAULT true, "modules" TEXT[] DEFAULT ARRAY[]::TEXT[], "locale" TEXT NOT NULL DEFAULT 'de', "token_hash" TEXT NOT NULL, "expires_at" TIMESTAMP(3) NOT NULL, "ip_hash" TEXT, "accepted_terms_at" TIMESTAMP(3) NOT NULL, "confirmed_at" TIMESTAMP(3), "provisioned_tenant_id" TEXT, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "trial_signups_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "tenant_exports" ( "id" TEXT NOT NULL, "tenant_id" TEXT NOT NULL, "requested_by_id" TEXT, "status" TEXT NOT NULL DEFAULT 'queued', "storage_key" TEXT, "file_name" TEXT, "bytes" INTEGER, "summary" JSONB, "error" TEXT, "expires_at" TIMESTAMP(3), "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "tenant_exports_pkey" PRIMARY KEY ("id") ); -- CreateIndex CREATE UNIQUE INDEX "trial_signups_token_hash_key" ON "trial_signups"("token_hash"); -- CreateIndex CREATE INDEX "trial_signups_email_idx" ON "trial_signups"("email"); -- CreateIndex CREATE INDEX "trial_signups_status_expires_at_idx" ON "trial_signups"("status", "expires_at"); -- CreateIndex CREATE INDEX "tenant_exports_tenant_id_created_at_idx" ON "tenant_exports"("tenant_id", "created_at"); -- Mandanten-Tabelle: Row Level Security (docs/craftvia/MIGRATIONS.md) SELECT enable_tenant_rls('tenant_exports');