const { PrismaClient } = require('@prisma/client'); const prisma = new PrismaClient(); async function fixConstraints() { try { // Create indexes await prisma.$executeRawUnsafe(` CREATE INDEX IF NOT EXISTS "notes_user_id_course_id_idx" ON "notes"("user_id", "course_id"); `); console.log('✓ Created index: notes_user_id_course_id_idx'); await prisma.$executeRawUnsafe(` CREATE INDEX IF NOT EXISTS "notes_user_id_node_id_idx" ON "notes"("user_id", "node_id"); `); console.log('✓ Created index: notes_user_id_node_id_idx'); await prisma.$executeRawUnsafe(` CREATE INDEX IF NOT EXISTS "notes_course_id_node_id_idx" ON "notes"("course_id", "node_id"); `); console.log('✓ Created index: notes_course_id_node_id_idx'); // Create foreign keys (check if they exist first) const constraints = await prisma.$queryRaw` SELECT conname FROM pg_constraint WHERE conrelid = 'notes'::regclass AND contype = 'f' `; const existingConstraints = constraints.map(c => c.conname); if (!existingConstraints.includes('notes_user_id_fkey')) { await prisma.$executeRawUnsafe(` ALTER TABLE "notes" ADD CONSTRAINT "notes_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE; `); console.log('✓ Created foreign key: notes_user_id_fkey'); } if (!existingConstraints.includes('notes_course_id_fkey')) { await prisma.$executeRawUnsafe(` ALTER TABLE "notes" ADD CONSTRAINT "notes_course_id_fkey" FOREIGN KEY ("course_id") REFERENCES "courses"("id") ON DELETE CASCADE ON UPDATE CASCADE; `); console.log('✓ Created foreign key: notes_course_id_fkey'); } if (!existingConstraints.includes('notes_node_id_fkey')) { await prisma.$executeRawUnsafe(` ALTER TABLE "notes" ADD CONSTRAINT "notes_node_id_fkey" FOREIGN KEY ("node_id") REFERENCES "course_nodes"("id") ON DELETE CASCADE ON UPDATE CASCADE; `); console.log('✓ Created foreign key: notes_node_id_fkey'); } console.log('\n✅ All constraints created successfully'); } catch (error) { console.error('Error:', error.message); } finally { await prisma.$disconnect(); } } fixConstraints();