Added few configurations & mores
This commit is contained in:
131
app/api/dashboard/stats/route.ts
Normal file
131
app/api/dashboard/stats/route.ts
Normal file
@@ -0,0 +1,131 @@
|
||||
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 (montant total des trajets validés/terminés + nombre de factures)
|
||||
// Pour l'instant, on considère qu'un trajet terminé = une facture
|
||||
// Montant estimé : 6.80€ par trajet (valeur moyenne basée sur l'image)
|
||||
const trajetsMois = await prisma.trajet.findMany({
|
||||
where: {
|
||||
archived: false,
|
||||
statut: {
|
||||
in: ['Terminé', 'Validé'],
|
||||
},
|
||||
date: {
|
||||
gte: startOfMonth,
|
||||
lte: endOfMonth,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const montantMoyenParTrajet = 6.80; // Montant moyen par trajet en euros
|
||||
const participationsMois = trajetsMois.length * montantMoyenParTrajet;
|
||||
const nombreFactures = trajetsMois.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 }
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user