import { NextRequest, NextResponse } from 'next/server'; import { getFormData } from '@akinon/next/data/server'; interface FormRouteParams { params: Promise<{ id: string[]; }>; } interface FormConfig { pk: number; is_active: boolean; } type SubmissionData = Record; export async function POST(request: NextRequest, { params }: FormRouteParams) { try { const { id } = await params; const formId = id?.[0]; if (!formId || isNaN(Number(formId))) { return NextResponse.json( { error: 'Valid form ID is required' }, { status: 400 } ); } const formConfig: FormConfig | null = await getFormData({ pk: Number(formId) }); if (!formConfig || !formConfig.is_active) { return NextResponse.json( { error: 'Form not found or inactive' }, { status: 404 } ); } const formData = await request.formData(); const submissionData: SubmissionData = Object.fromEntries( formData.entries() ); return await processFormSubmission(formConfig, submissionData); } catch (error) { console.error('Form submission error:', error); return NextResponse.json( { error: 'Internal server error' }, { status: 500 } ); } } async function processFormSubmission( formConfig: FormConfig, data: SubmissionData ) { const backendUrl = process.env.SERVICE_BACKEND_URL; if (!backendUrl) { throw new Error('SERVICE_BACKEND_URL is not defined'); } const url = `${backendUrl}/forms/${formConfig.pk}/generate`; const submissionPayload = { ...data }; const response = await fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(submissionPayload) }); const body = await response.text(); return new NextResponse(body, { status: response.status, headers: { 'Content-Type': response.headers.get('content-type') ?? 'application/json' } }); }