← back to Wine Finder Next

app/api/vivino/search/route.ts

41 lines

import { NextRequest, NextResponse } from 'next/server';
import { generateMockWineData } from '@/lib/services/mockWineData';

/**
 * Vivino Search API Route
 * DEMO MODE: Using mock data until Vivino Partners API is configured
 * TODO: Replace with official Vivino Partners API when key is available
 */

export async function GET(request: NextRequest) {
  const searchParams = request.nextUrl.searchParams;
  const query = searchParams.get('q');

  if (!query) {
    return NextResponse.json({ error: 'Query parameter "q" is required' }, { status: 400 });
  }

  try {
    // DEMO: Generate mock data for testing the UI
    // This shows retail listings with realistic pricing
    const mockWines = generateMockWineData(query);
    const vivinoWines = mockWines.filter(w => w.providerName === 'Vivino');

    console.log(`[Vivino DEMO] Returning ${vivinoWines.length} mock wines for query: ${query}`);

    return NextResponse.json({ wines: vivinoWines });

    // TODO: Uncomment when Vivino Partners API key is available
    // const vivinoApiKey = process.env.VIVINO_PARTNERS_API_KEY;
    // const response = await fetch(`https://api.vivino.com/partners/search?q=${encodeURIComponent(query)}`, {
    //   headers: { 'Authorization': `Bearer ${vivinoApiKey}` }
    // });
    // const data = await response.json();
    // return NextResponse.json({ wines: transformVivinoData(data) });

  } catch (error) {
    console.error('Vivino search error:', error);
    return NextResponse.json({ wines: [] });
  }
}