import { NextResponse } from "next/server"; import { getDatabase } from "@/lib/db/mongodb"; export async function POST() { try { const db = await getDatabase(); // Récupérer tous les utilisateurs existants const users = await db.collection("users").find({}).toArray(); const userIds = new Set(users.map(user => user._id.toString())); // Récupérer toutes les balances const balances = await db.collection("balances").find({}).toArray(); // Identifier les balances fantômes const phantomBalances = balances.filter(balance => !userIds.has(balance.user.toString()) ); // Calculer les statistiques avant nettoyage const totalBalances = balances.length; const phantomCount = phantomBalances.length; const phantomCredits = phantomBalances.reduce( (sum, balance) => sum + (balance.tokenCredits || 0), 0 ); console.log(`🗑️ SUPPRESSION: ${phantomCount} balances fantômes détectées`); console.log(`💰 CRÉDITS FANTÔMES: ${phantomCredits}`); // SUPPRESSION DÉFINITIVE des balances fantômes const deleteResult = await db.collection("balances").deleteMany({ user: { $nin: Array.from(userIds) } }); console.log(`✅ SUPPRIMÉES: ${deleteResult.deletedCount} balances`); return NextResponse.json({ success: true, statistics: { totalBalances, phantomCount, phantomCredits, cleanedCount: deleteResult.deletedCount }, message: `${deleteResult.deletedCount} balances fantômes supprimées définitivement` }); } catch (error) { console.error("Erreur lors du nettoyage des balances:", error); return NextResponse.json({ error: "Erreur serveur" }, { status: 500 }); } } // Endpoint pour analyser sans nettoyer export async function GET() { try { const db = await getDatabase(); const users = await db.collection("users").find({}).toArray(); const userIds = new Set(users.map(user => user._id.toString())); const balances = await db.collection("balances").find({}).toArray(); const phantomBalances = balances.filter(balance => !userIds.has(balance.user.toString()) ); const phantomCredits = phantomBalances.reduce( (sum, balance) => sum + (balance.tokenCredits || 0), 0 ); // Analyser les doublons aussi const userCounts = new Map(); balances.forEach(balance => { const userId = balance.user.toString(); userCounts.set(userId, (userCounts.get(userId) || 0) + 1); }); const duplicates = Array.from(userCounts.entries()) .filter(([, count]) => count > 1) .map(([userId, count]) => ({ userId, count, isPhantom: !userIds.has(userId) })); return NextResponse.json({ analysis: { totalBalances: balances.length, totalUsers: users.length, phantomBalances: phantomBalances.length, phantomCredits, duplicateUsers: duplicates.length, duplicates: duplicates.slice(0, 10) // Premiers 10 exemples } }); } catch (error) { console.error("Erreur lors de l'analyse des balances:", error); return NextResponse.json({ error: "Erreur serveur" }, { status: 500 }); } }