| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- 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<GenerateClassroomInput>;
- requirementSnippet = rawBody.requirement?.substring(0, 60);
- const body: GenerateClassroomInput = {
- requirement: rawBody.requirement || '',
- ...(rawBody.pdfContent ? { pdfContent: rawBody.pdfContent } : {}),
- ...(rawBody.language ? { language: rawBody.language } : {}),
- ...(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',
- );
- }
- }
|