import { NextRequest, NextResponse } from 'next/server'; import { prisma } from '@/lib/prisma'; import { getCurrentUser } from '@/lib/auth'; // GET - Récupérer les statistiques du dashboard export async function GET(request: NextRequest) { try { const user = await getCurrentUser(); if (!user) { return NextResponse.json({ error: 'Non autorisé' }, { status: 401 }); } const now = new Date(); const startOfToday = new Date(now.getFullYear(), now.getMonth(), now.getDate()); const endOfToday = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 23, 59, 59, 999); const startOfMonth = new Date(now.getFullYear(), now.getMonth(), 1); const endOfMonth = new Date(now.getFullYear(), now.getMonth() + 1, 0, 23, 59, 59, 999); const startOfLastMonth = new Date(now.getFullYear(), now.getMonth() - 1, 1); const endOfLastMonth = new Date(now.getFullYear(), now.getMonth(), 0, 23, 59, 59, 999); const startOfYesterday = new Date(now.getFullYear(), now.getMonth(), now.getDate() - 1); const endOfYesterday = new Date(now.getFullYear(), now.getMonth(), now.getDate() - 1, 23, 59, 59, 999); // 1. Participations du mois (trajets validés/terminés ce mois) const participationsMoisData = await prisma.participationFinanciere.findMany({ where: { trajet: { date: { gte: startOfMonth, lte: endOfMonth, }, }, }, include: { trajet: { select: { date: true } } }, }); const participationsCeMois = participationsMoisData; const montantMoyenParTrajet = 6.80; const participationsMois = participationsCeMois.reduce( (sum, p) => sum + (p.montant ?? montantMoyenParTrajet), 0 ); const nombreFactures = participationsCeMois.length; // 2. Trajets aujourd'hui const trajetsAujourdhui = await prisma.trajet.count({ where: { archived: false, date: { gte: startOfToday, lte: endOfToday, }, }, }); // Trajets hier pour comparaison const trajetsHier = await prisma.trajet.count({ where: { archived: false, date: { gte: startOfYesterday, lte: endOfYesterday, }, }, }); const differenceAujourdhui = trajetsAujourdhui - trajetsHier; // 3. Trajets réalisés ce mois (terminés) const trajetsRealisesMois = await prisma.trajet.count({ where: { archived: false, statut: 'Terminé', date: { gte: startOfMonth, lte: endOfMonth, }, }, }); // Trajets réalisés le mois dernier pour comparaison const trajetsRealisesMoisDernier = await prisma.trajet.count({ where: { archived: false, statut: 'Terminé', date: { gte: startOfLastMonth, lte: endOfLastMonth, }, }, }); const pourcentageEvolution = trajetsRealisesMoisDernier > 0 ? Math.round(((trajetsRealisesMois - trajetsRealisesMoisDernier) / trajetsRealisesMoisDernier) * 100) : trajetsRealisesMois > 0 ? 100 : 0; // 4. Chauffeurs actifs (disponibles) const totalChauffeurs = await prisma.chauffeur.count(); const chauffeursActifs = await prisma.chauffeur.count({ where: { status: 'Disponible', }, }); return NextResponse.json({ participationsMois: { montant: participationsMois, nombreFactures: nombreFactures, }, trajetsAujourdhui: { nombre: trajetsAujourdhui, difference: differenceAujourdhui, }, trajetsRealisesMois: { nombre: trajetsRealisesMois, pourcentageEvolution: pourcentageEvolution, }, chauffeursActifs: { nombre: chauffeursActifs, total: totalChauffeurs, }, }); } catch (error) { console.error('Erreur lors de la récupération des statistiques:', error); return NextResponse.json( { error: 'Erreur serveur' }, { status: 500 } ); } }