← back to Wine Finder Next

app/api/winebid/search/route.ts

55 lines

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

/**
 * WineBid Auction Search API Route
 * DEMO MODE: Using mock data until WineBid API access is configured
 * TODO: Sign up for WineBid Partner/API access
 */

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 auction data for testing the UI
    const mockWines = generateMockWineData(query);
    const wineBidWines = mockWines.filter(w => w.providerName === 'WineBid');

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

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

    // TODO: Implement actual WineBid API call
    // Example structure:
    // const response = await fetch(`https://api.winebid.com/v1/search?q=${encodeURIComponent(query)}`, {
    //   headers: {
    //     'Authorization': `Bearer ${wineBidApiKey}`,
    //     'Content-Type': 'application/json',
    //   },
    // });
    // const data = await response.json();
    // const wines = data.results.map(item => ({
    //   id: `winebid-${item.id}`,
    //   name: item.name,
    //   vintage: item.vintage,
    //   provider: 'auction',
    //   providerName: 'WineBid',
    //   currentPrice: { amount: item.currentBid, currency: 'USD' },
    //   bidCount: item.bidCount,
    //   closingDate: item.auctionEndTime,
    //   url: item.url,
    //   lastUpdated: new Date().toISOString(),
    // }));
    // return NextResponse.json({ wines });

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