import { after, type NextRequest } from 'next/server'; import { nanoid } from 'nanoid'; import { apiError, apiSuccess } from '@/lib/server/api-response'; import { type GenerateClassroomInput } from '@/lib/server/classroom-generation'; import { runClassroomGenerationJob } from '@/lib/server/classroom-job-runner'; import { createClassroomGenerationJob } from '@/lib/server/classroom-job-store'; import { buildRequestOrigin } from '@/lib/server/classroom-storage'; import { createLogger } from '@/lib/logger'; const log = createLogger('GenerateClassroom API'); export const maxDuration = 30; export async function POST(req: NextRequest) { let requirementSnippet: string | undefined; try { const rawBody = (await req.json()) as Partial; requirementSnippet = rawBody.requirement?.substring(0, 60); const body: GenerateClassroomInput = { requirement: rawBody.requirement || '', ...(rawBody.pdfContent ? { pdfContent: rawBody.pdfContent } : {}), ...(rawBody.enableWebSearch != null ? { enableWebSearch: rawBody.enableWebSearch } : {}), ...(rawBody.enableImageGeneration != null ? { enableImageGeneration: rawBody.enableImageGeneration } : {}), ...(rawBody.enableVideoGeneration != null ? { enableVideoGeneration: rawBody.enableVideoGeneration } : {}), ...(rawBody.enableTTS != null ? { enableTTS: rawBody.enableTTS } : {}), ...(rawBody.agentMode ? { agentMode: rawBody.agentMode } : {}), }; const { requirement } = body; if (!requirement) { return apiError('MISSING_REQUIRED_FIELD', 400, 'Missing required field: requirement'); } const baseUrl = buildRequestOrigin(req); const jobId = nanoid(10); const job = await createClassroomGenerationJob(jobId, body); const pollUrl = `${baseUrl}/api/generate-classroom/${jobId}`; after(() => runClassroomGenerationJob(jobId, body, baseUrl)); return apiSuccess( { jobId, status: job.status, step: job.step, message: job.message, pollUrl, pollIntervalMs: 5000, }, 202, ); } catch (error) { log.error( `Classroom generation job creation failed [requirement="${requirementSnippet ?? 'unknown'}..."]:`, error, ); return apiError( 'INTERNAL_ERROR', 500, 'Failed to create classroom generation job', error instanceof Error ? error.message : 'Unknown error', ); } }