// app/api/enrollments/sync.ts import { NextResponse } from 'next/server'; import type { NextRequest } from 'next/server'; import { getServerSession } from 'next-auth'; import { authOptions } from '@/lib/auth-options'; import { prisma } from '@/lib/prisma'; export async function POST(req: NextRequest) { console.log('🔥 [SYNC-ENROLLMENTS] POST endpoint called'); console.log('🔥 [SYNC-ENROLLMENTS] Request method:', req.method); console.log('🔥 [SYNC-ENROLLMENTS] Request URL:', req.url); try { const session = await getServerSession(authOptions); console.log('🔥 [SYNC-ENROLLMENTS] Session check:', !!session?.user?.email); console.log('🔥 [SYNC-ENROLLMENTS] Session user:', session?.user); if (!session?.user?.email) { console.log('🔥 [SYNC-ENROLLMENTS] No session or email, returning 401'); return NextResponse.json({ error: 'Unauthorized' }, { status: 401 }); } const userEmail = session.user.email; console.log('🔥 [SYNC-ENROLLMENTS] About to parse request body...'); const body = await req.json(); console.log('🔥 [SYNC-ENROLLMENTS] Raw body received:', JSON.stringify(body, null, 2)); const levels: string[] = body?.levels || []; console.log('🔥 [SYNC-ENROLLMENTS] Extracted levels:', levels); console.log('🔥 [SYNC-ENROLLMENTS] Levels type check - isArray:', Array.isArray(levels)); console.log('🔥 [SYNC-ENROLLMENTS] Levels length:', levels.length); console.log('🔥 [SYNC-ENROLLMENTS] User:', userEmail); console.log('🔥 [SYNC-ENROLLMENTS] Received levels:', levels); if (!Array.isArray(levels) || levels.length === 0) { console.log('🔥 [SYNC-ENROLLMENTS] VALIDATION FAILED!'); console.log('🔥 [SYNC-ENROLLMENTS] levels isArray:', Array.isArray(levels)); console.log('🔥 [SYNC-ENROLLMENTS] levels length:', levels?.length); console.log('🔥 [SYNC-ENROLLMENTS] levels value:', levels); console.log('🔥 [SYNC-ENROLLMENTS] Returning 400 - Levels array required'); return NextResponse.json( { error: 'Levels array required' }, { status: 400 } ); } // Get user const user = await prisma.user.findUnique({ where: { email: userEmail }, }); if (!user) { console.log('[SYNC-ENROLLMENTS] User not found in database:', userEmail); return NextResponse.json({ error: 'User not found' }, { status: 404 }); } console.log('[SYNC-ENROLLMENTS] Found user:', user.id, user.email); const createdEnrollments = []; // For each course level, find the course and create enrollment for (const level of levels) { try { console.log('[SYNC-ENROLLMENTS] Looking for course with code:', level); const course = await prisma.course.findUnique({ where: { code: level }, }); if (!course) { console.warn(`[SYNC-ENROLLMENTS] Course code not found: ${level}`); continue; } console.log('[SYNC-ENROLLMENTS] Found course:', course.id, course.code, course.title); // Check if enrollment already exists const existing = await prisma.enrollment.findFirst({ where: { userId: user.id, courseId: course.id }, }); if (existing) { console.log('[SYNC-ENROLLMENTS] Enrollment already exists:', existing.id); } else { const enrollment = await prisma.enrollment.create({ data: { userId: user.id, courseId: course.id, }, }); console.log('[SYNC-ENROLLMENTS] Created new enrollment:', enrollment.id); createdEnrollments.push({ courseCode: level, courseId: course.id, enrollmentId: enrollment.id, }); } } catch (err) { console.error(`[SYNC-ENROLLMENTS] Failed to create enrollment for level ${level}:`, err); } } console.log('[SYNC-ENROLLMENTS] Summary - Created enrollments:', createdEnrollments.length); console.log('[SYNC-ENROLLMENTS] Details:', createdEnrollments); return NextResponse.json( { message: 'Enrollments synced', created: createdEnrollments, }, { status: 200 } ); } catch (err) { console.error('🔥 [SYNC-ENROLLMENTS] FATAL ERROR:', err); console.error('🔥 [SYNC-ENROLLMENTS] Error stack:', err instanceof Error ? err.stack : 'No stack'); return NextResponse.json( { error: 'Failed to sync enrollments' }, { status: 500 } ); } }