import { NextRequest, NextResponse } from 'next/server'; import prisma from '../../../../../lib/prisma'; export async function GET( request: NextRequest, { params }: { params: Promise<{ id: string }> } ) { try { const { id } = await params; if (!id) { return NextResponse.json({ error: 'ID Business requis' }, { status: 400 }); } // 1. Get total views from AnalyticsEvent const totalViews = await prisma.analyticsEvent.count({ where: { type: 'BUSINESS_VIEW', metadata: { path: ['businessId'], equals: id } } }); // 2. Get contact clicks from AnalyticsEvent const contactClicks = await prisma.analyticsEvent.count({ where: { type: 'BUSINESS_CONTACT_CLICK', metadata: { path: ['businessId'], equals: id } } }); // 3. Get monthly stats (views per day for last 30 days) const thirtyDaysAgo = new Date(); thirtyDaysAgo.setDate(thirtyDaysAgo.getDate() - 30); thirtyDaysAgo.setHours(0, 0, 0, 0); const recentEvents = await prisma.analyticsEvent.findMany({ where: { createdAt: { gte: thirtyDaysAgo }, metadata: { path: ['businessId'], equals: id } }, select: { type: true, createdAt: true }, orderBy: { createdAt: 'asc' } }); // 4. Process events into daily stats const statsMap = new Map(); // Initialize last 30 days with 0 for (let i = 0; i <= 30; i++) { const date = new Date(); date.setDate(date.getDate() - i); const dateStr = date.toISOString().split('T')[0]; const displayDate = date.toLocaleDateString('fr-FR', { day: 'numeric', month: 'short' }); statsMap.set(dateStr, { date: displayDate, views: 0, clicks: 0 }); } recentEvents.forEach(event => { const dateStr = event.createdAt.toISOString().split('T')[0]; if (statsMap.has(dateStr)) { const dayStat = statsMap.get(dateStr)!; if (event.type === 'BUSINESS_VIEW') { dayStat.views++; } else if (event.type === 'BUSINESS_CONTACT_CLICK') { dayStat.clicks++; } } }); // Convert Map to sorted array const dailyStats = Array.from(statsMap.values()).reverse(); // Older to newer return NextResponse.json({ businessId: id, totalViews, contactClicks, dailyStats, updatedAt: new Date().toISOString() }); } catch (error) { console.error('Error fetching business analytics:', error); return NextResponse.json({ error: 'Erreur serveur' }, { status: 500 }); } }