import { NextResponse } from 'next/server'; import Settings from 'settings'; const IMAGE_SEARCH_API_URL = Settings.commerceUrl + '/image-search/'; const errorResponse = (message: string, status: number) => { return NextResponse.json({ error: message }, { status }); }; export async function GET(request: Request) { const { searchParams } = new URL(request.url); const limit = searchParams.get('limit') || '20'; const url = searchParams.get('url'); const excludedProductIds = searchParams.get('excluded_product_ids'); if (!url) { return errorResponse('URL parameter is required', 400); } if (Settings.commerceUrl === 'default') { return errorResponse('Commerce URL is not configured', 500); } const apiParams = new URLSearchParams(); apiParams.append('limit', limit); apiParams.append('url', url); if (excludedProductIds) { apiParams.append('excluded_product_ids', excludedProductIds); } const apiUrl = `${IMAGE_SEARCH_API_URL}?${apiParams.toString()}`; try { const response = await fetch(apiUrl, { method: 'GET', headers: { Accept: 'application/json' } }); if (!response.ok) { const errorText = await response.text(); return errorResponse( errorText || `API request failed with status: ${response.status}`, response.status ); } const responseText = await response.text(); return NextResponse.json(JSON.parse(responseText)); } catch (error) { return errorResponse((error as Error).message, 500); } } export async function POST(request: Request) { const { searchParams } = new URL(request.url); const limit = searchParams.get('limit') || '20'; if (Settings.commerceUrl === 'default') { return errorResponse('Commerce URL is not configured', 500); } let requestBody; try { requestBody = await request.json(); } catch (error) { return errorResponse('Invalid JSON in request body', 400); } if (!requestBody.image) { return errorResponse('Image data is required in request body', 400); } const apiParams = new URLSearchParams(); apiParams.append('limit', limit); const apiUrl = `${IMAGE_SEARCH_API_URL}?${apiParams.toString()}`; const bodyData: any = { image: requestBody.image }; if (requestBody.excluded_product_ids) { bodyData.excluded_product_ids = requestBody.excluded_product_ids; } try { const response = await fetch(apiUrl, { method: 'POST', headers: { 'Content-Type': 'application/json', Accept: 'application/json' }, body: JSON.stringify(bodyData) }); if (!response.ok) { const errorText = await response.text(); return errorResponse( errorText || `API request failed with status: ${response.status}`, response.status ); } const responseData = await response.json(); return NextResponse.json(responseData); } catch (error) { return errorResponse((error as Error).message, 500); } }