-- Reconciliation migration: Add missing foreign keys and indexes -- The add_15_features migration omitted some FKs and indexes that the schema expects -- This migration brings the database in line with the Prisma schema -- ===================================================== -- Missing Foreign Keys -- ===================================================== -- RoundTemplate -> Program DO $$ BEGIN ALTER TABLE "RoundTemplate" ADD CONSTRAINT "RoundTemplate_programId_fkey" FOREIGN KEY ("programId") REFERENCES "Program"("id") ON DELETE CASCADE ON UPDATE CASCADE; EXCEPTION WHEN duplicate_object THEN NULL; END $$; -- RoundTemplate -> User (creator) DO $$ BEGIN ALTER TABLE "RoundTemplate" ADD CONSTRAINT "RoundTemplate_createdBy_fkey" FOREIGN KEY ("createdBy") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE; EXCEPTION WHEN duplicate_object THEN NULL; END $$; -- Message -> Round DO $$ BEGIN ALTER TABLE "Message" ADD CONSTRAINT "Message_roundId_fkey" FOREIGN KEY ("roundId") REFERENCES "Round"("id") ON DELETE SET NULL ON UPDATE CASCADE; EXCEPTION WHEN duplicate_object THEN NULL; END $$; -- EvaluationDiscussion -> Round DO $$ BEGIN ALTER TABLE "EvaluationDiscussion" ADD CONSTRAINT "EvaluationDiscussion_roundId_fkey" FOREIGN KEY ("roundId") REFERENCES "Round"("id") ON DELETE CASCADE ON UPDATE CASCADE; EXCEPTION WHEN duplicate_object THEN NULL; END $$; -- ProjectFile -> ProjectFile (self-relation for file versioning) DO $$ BEGIN ALTER TABLE "ProjectFile" ADD CONSTRAINT "ProjectFile_replacedById_fkey" FOREIGN KEY ("replacedById") REFERENCES "ProjectFile"("id") ON DELETE SET NULL ON UPDATE CASCADE; EXCEPTION WHEN duplicate_object THEN NULL; END $$; -- ===================================================== -- Missing Indexes -- ===================================================== CREATE INDEX IF NOT EXISTS "RoundTemplate_roundType_idx" ON "RoundTemplate"("roundType"); CREATE INDEX IF NOT EXISTS "MentorNote_authorId_idx" ON "MentorNote"("authorId"); CREATE INDEX IF NOT EXISTS "MentorMilestoneCompletion_completedById_idx" ON "MentorMilestoneCompletion"("completedById"); CREATE INDEX IF NOT EXISTS "Webhook_createdById_idx" ON "Webhook"("createdById"); CREATE INDEX IF NOT EXISTS "WebhookDelivery_event_idx" ON "WebhookDelivery"("event"); CREATE INDEX IF NOT EXISTS "Message_roundId_idx" ON "Message"("roundId"); CREATE INDEX IF NOT EXISTS "EvaluationDiscussion_closedById_idx" ON "EvaluationDiscussion"("closedById"); CREATE INDEX IF NOT EXISTS "DiscussionComment_discussionId_idx" ON "DiscussionComment"("discussionId"); CREATE INDEX IF NOT EXISTS "DiscussionComment_userId_idx" ON "DiscussionComment"("userId");