MOPC-App/prisma/migrations/20260203200000_add_onboardi.../migration.sql

148 lines
5.2 KiB
MySQL
Raw Normal View History

-- Add Onboarding System Schema Changes
-- This migration adds the onboarding configuration system for the public application wizard
-- CreateEnum: SpecialFieldType
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'SpecialFieldType') THEN
CREATE TYPE "SpecialFieldType" AS ENUM (
'TEAM_MEMBERS',
'COMPETITION_CATEGORY',
'OCEAN_ISSUE',
'FILE_UPLOAD',
'GDPR_CONSENT',
'COUNTRY_SELECT'
);
END IF;
END $$;
-- CreateTable: OnboardingStep
CREATE TABLE IF NOT EXISTS "OnboardingStep" (
"id" TEXT NOT NULL,
"formId" TEXT NOT NULL,
"name" TEXT NOT NULL,
"title" TEXT NOT NULL,
"description" TEXT,
"sortOrder" INTEGER NOT NULL DEFAULT 0,
"isOptional" BOOLEAN NOT NULL DEFAULT false,
"conditionJson" JSONB,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "OnboardingStep_pkey" PRIMARY KEY ("id")
);
-- Add columns to ApplicationForm
DO $$
BEGIN
-- roundId column (unique)
IF NOT EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_name = 'ApplicationForm' AND column_name = 'roundId'
) THEN
ALTER TABLE "ApplicationForm" ADD COLUMN "roundId" TEXT;
END IF;
-- sendConfirmationEmail column
IF NOT EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_name = 'ApplicationForm' AND column_name = 'sendConfirmationEmail'
) THEN
ALTER TABLE "ApplicationForm" ADD COLUMN "sendConfirmationEmail" BOOLEAN NOT NULL DEFAULT true;
END IF;
-- sendTeamInviteEmails column
IF NOT EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_name = 'ApplicationForm' AND column_name = 'sendTeamInviteEmails'
) THEN
ALTER TABLE "ApplicationForm" ADD COLUMN "sendTeamInviteEmails" BOOLEAN NOT NULL DEFAULT true;
END IF;
-- confirmationEmailSubject column
IF NOT EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_name = 'ApplicationForm' AND column_name = 'confirmationEmailSubject'
) THEN
ALTER TABLE "ApplicationForm" ADD COLUMN "confirmationEmailSubject" TEXT;
END IF;
-- confirmationEmailBody column
IF NOT EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_name = 'ApplicationForm' AND column_name = 'confirmationEmailBody'
) THEN
ALTER TABLE "ApplicationForm" ADD COLUMN "confirmationEmailBody" TEXT;
END IF;
END $$;
-- Add columns to ApplicationFormField
DO $$
BEGIN
-- stepId column
IF NOT EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_name = 'ApplicationFormField' AND column_name = 'stepId'
) THEN
ALTER TABLE "ApplicationFormField" ADD COLUMN "stepId" TEXT;
END IF;
-- projectMapping column
IF NOT EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_name = 'ApplicationFormField' AND column_name = 'projectMapping'
) THEN
ALTER TABLE "ApplicationFormField" ADD COLUMN "projectMapping" TEXT;
END IF;
-- specialType column
IF NOT EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_name = 'ApplicationFormField' AND column_name = 'specialType'
) THEN
ALTER TABLE "ApplicationFormField" ADD COLUMN "specialType" "SpecialFieldType";
END IF;
END $$;
-- Create indexes for OnboardingStep
CREATE INDEX IF NOT EXISTS "OnboardingStep_formId_idx" ON "OnboardingStep"("formId");
CREATE INDEX IF NOT EXISTS "OnboardingStep_sortOrder_idx" ON "OnboardingStep"("sortOrder");
-- Create index for ApplicationForm.roundId
CREATE UNIQUE INDEX IF NOT EXISTS "ApplicationForm_roundId_key" ON "ApplicationForm"("roundId");
CREATE INDEX IF NOT EXISTS "ApplicationForm_roundId_idx" ON "ApplicationForm"("roundId");
-- Create index for ApplicationFormField.stepId
CREATE INDEX IF NOT EXISTS "ApplicationFormField_stepId_idx" ON "ApplicationFormField"("stepId");
-- Add foreign key constraints
DO $$
BEGIN
-- OnboardingStep -> ApplicationForm
IF NOT EXISTS (
SELECT 1 FROM information_schema.table_constraints
WHERE constraint_name = 'OnboardingStep_formId_fkey'
) THEN
ALTER TABLE "OnboardingStep" ADD CONSTRAINT "OnboardingStep_formId_fkey"
FOREIGN KEY ("formId") REFERENCES "ApplicationForm"("id") ON DELETE CASCADE ON UPDATE CASCADE;
END IF;
-- ApplicationFormField -> OnboardingStep
IF NOT EXISTS (
SELECT 1 FROM information_schema.table_constraints
WHERE constraint_name = 'ApplicationFormField_stepId_fkey'
) THEN
ALTER TABLE "ApplicationFormField" ADD CONSTRAINT "ApplicationFormField_stepId_fkey"
FOREIGN KEY ("stepId") REFERENCES "OnboardingStep"("id") ON DELETE SET NULL ON UPDATE CASCADE;
END IF;
-- ApplicationForm -> Round
IF NOT EXISTS (
SELECT 1 FROM information_schema.table_constraints
WHERE constraint_name = 'ApplicationForm_roundId_fkey'
) THEN
ALTER TABLE "ApplicationForm" ADD CONSTRAINT "ApplicationForm_roundId_fkey"
FOREIGN KEY ("roundId") REFERENCES "Round"("id") ON DELETE SET NULL ON UPDATE CASCADE;
END IF;
END $$;