← back to Wine Finder Next

app/api/affiliate/impression/route.ts

56 lines

import { NextRequest, NextResponse } from 'next/server';

// Track wine impressions (views)
const impressionsStorage: any[] = [];

export async function POST(request: NextRequest) {
  try {
    const body = await request.json();

    const impression = {
      ...body,
      timestamp: new Date().toISOString(),
      ip: request.headers.get('x-forwarded-for') || 'unknown',
      userAgent: request.headers.get('user-agent') || 'unknown'
    };

    impressionsStorage.push(impression);

    // Log every 100 impressions
    if (impressionsStorage.length % 100 === 0) {
      console.log(`Tracked ${impressionsStorage.length} wine impressions`);
    }

    return NextResponse.json({ success: true });
  } catch (error: any) {
    console.error('Error tracking impression:', error);
    return NextResponse.json(
      { error: 'Failed to track impression' },
      { status: 500 }
    );
  }
}

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

    let filtered = impressionsStorage;
    if (wineId) {
      filtered = filtered.filter(i => i.wineId === wineId);
    }

    return NextResponse.json({
      success: true,
      total: filtered.length,
      impressions: filtered.slice(-50)
    });
  } catch (error: any) {
    return NextResponse.json(
      { error: 'Failed to get impressions' },
      { status: 500 }
    );
  }
}