← 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 }
);
}
}