import { NextRequest, NextResponse } from 'next/server' interface CreateProjectRequest { project_name: string project_description: string template_name?: string } interface ProjectData { name: string description: string template_name?: string } // Get backend URL from environment const PYTHON_BACKEND_URL = process.env.PYTHON_BACKEND_HOST || 'http://localhost:8002' export async function POST(request: NextRequest) { try { const body: CreateProjectRequest = await request.json() // Validate required fields if (!body.project_name || !body.project_description || !body.template_name) { return NextResponse.json( { error: 'Project name, description and template name are required' }, { status: 400 } ) } // Prepare project data with both project and template information const projectData: ProjectData = { name: body.project_name.trim(), description: body.project_description.trim(), template_name: body.template_name || undefined, } // Send to Python backend const backendResponse = await fetch(`${PYTHON_BACKEND_URL}/project/create`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(projectData) }) if (!backendResponse.ok) { // Try to get error details from backend let errorMessage = `Backend error: ${backendResponse.statusText}` try { const errorData = await backendResponse.json() errorMessage = errorData.error || errorMessage } catch { // If we can't parse the error, use the status text } console.error(`Error creating project in backend: ${backendResponse.status} - ${errorMessage}`) return NextResponse.json( { error: `Failed to create project: ${errorMessage}` }, { status: backendResponse.status } ) } // Get the created project from backend response const createdProject = await backendResponse.json() // Log successful creation with template info console.log("Project created successfully:", { projectName: createdProject.name, templateName: createdProject.template_name || 'none' }) return NextResponse.json(createdProject, { status: 201 }) } catch (error: unknown) { console.error('Error in createProject API route:', error) // Handle different types of errors if (error instanceof SyntaxError) { return NextResponse.json( { error: 'Invalid JSON in request body' }, { status: 400 } ) } if (error instanceof TypeError && error.message.includes('fetch')) { return NextResponse.json( { error: 'Unable to connect to backend service' }, { status: 503 } ) } const message = error instanceof Error ? error.message : 'An unknown error occurred' return NextResponse.json( { error: `Failed to create project: ${message}` }, { status: 500 } ) } } // Optional: Handle GET requests to return creation form or validation export async function GET() { return NextResponse.json({ message: 'Project creation endpoint', required_fields: ['project_name', 'project_description'], optional_fields: ['template_name', 'template_description'], method: 'POST' }) }