import { NextResponse } from "next/server"; import { getDatabase } from "@/lib/db/mongodb"; export async function GET() { try { const db = await getDatabase(); // Récupérer toutes les transactions const transactions = await db.collection("transactions").find({}).toArray(); console.log(`Total transactions trouvées: ${transactions.length}`); // Vérifier les champs de date disponibles dans les transactions if (transactions.length > 0) { const sampleTransaction = transactions[0]; console.log("Exemple de transaction:", { _id: sampleTransaction._id, createdAt: sampleTransaction.createdAt, updatedAt: sampleTransaction.updatedAt, date: sampleTransaction.date, timestamp: sampleTransaction.timestamp, rawAmount: sampleTransaction.rawAmount, model: sampleTransaction.model }); } // Calculer les tokens par jour (7 derniers jours) const dailyStats = []; const today = new Date(); const dayNames = ["Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam"]; for (let i = 6; i >= 0; i--) { const date = new Date(today); date.setDate(date.getDate() - i); date.setHours(0, 0, 0, 0); const nextDate = new Date(date); nextDate.setDate(nextDate.getDate() + 1); const dayTransactions = transactions.filter(transaction => { // Essayer différents champs de date let transactionDate = null; if (transaction.createdAt) { transactionDate = new Date(transaction.createdAt); } else if (transaction.updatedAt) { transactionDate = new Date(transaction.updatedAt); } else if (transaction.date) { transactionDate = new Date(transaction.date); } else if (transaction.timestamp) { transactionDate = new Date(transaction.timestamp); } else if (transaction._id && transaction._id.getTimestamp) { // Utiliser le timestamp de l'ObjectId MongoDB transactionDate = transaction._id.getTimestamp(); } if (!transactionDate || isNaN(transactionDate.getTime())) { return false; } return transactionDate >= date && transactionDate < nextDate; }); const totalTokens = dayTransactions.reduce((sum, transaction) => { // Essayer différents champs pour les tokens let tokens = 0; if (transaction.rawAmount) { tokens = Math.abs(Number(transaction.rawAmount) || 0); } else if (transaction.amount) { tokens = Math.abs(Number(transaction.amount) || 0); } else if (transaction.tokens) { tokens = Math.abs(Number(transaction.tokens) || 0); } return sum + tokens; }, 0); console.log(`${dayNames[date.getDay()]} (${date.toISOString().split('T')[0]}): ${dayTransactions.length} transactions, ${totalTokens} tokens`); dailyStats.push({ name: dayNames[date.getDay()], value: totalTokens }); } // Calculer la répartition par modèle (vraies données) const modelStats = new Map(); transactions.forEach(transaction => { const model = transaction.model || transaction.modelName || "Inconnu"; let tokens = 0; if (transaction.rawAmount) { tokens = Math.abs(Number(transaction.rawAmount) || 0); } else if (transaction.amount) { tokens = Math.abs(Number(transaction.amount) || 0); } else if (transaction.tokens) { tokens = Math.abs(Number(transaction.tokens) || 0); } if (tokens > 0) { modelStats.set(model, (modelStats.get(model) || 0) + tokens); } }); // Convertir en array et trier par usage const modelData = Array.from(modelStats.entries()) .map(([name, value]) => ({ name, value })) .sort((a, b) => b.value - a.value); console.log("Statistiques calculées:", { dailyStats, totalModels: modelData.length, topModel: modelData[0] }); return NextResponse.json({ dailyTokens: dailyStats, modelDistribution: modelData }); } catch (error) { console.error("Erreur lors du calcul des statistiques:", error); return NextResponse.json({ error: "Erreur serveur" }, { status: 500 }); } }