import { NextResponse } from "next/server"; import { getDatabase } from "@/lib/db/mongodb"; export async function POST() { try { const db = await getDatabase(); const CREDITS_TO_ADD = 3000000; // 3 millions de tokens console.log( `🚀 DÉBUT: Ajout de ${CREDITS_TO_ADD.toLocaleString()} crédits à tous les utilisateurs` ); // Récupérer tous les utilisateurs existants const users = await db.collection("users").find({}).toArray(); console.log(`👥 Utilisateurs trouvés: ${users.length}`); if (users.length === 0) { return NextResponse.json({ success: false, message: "Aucun utilisateur trouvé", }); } // Récupérer toutes les balances existantes const existingBalances = await db.collection("balances").find({}).toArray(); const existingBalanceUserIds = new Set( existingBalances.map((balance) => balance.user.toString()) ); console.log(`💰 Balances existantes: ${existingBalances.length}`); let updatedCount = 0; let createdCount = 0; let totalCreditsAdded = 0; // Pour chaque utilisateur for (const user of users) { const userId = user._id; if (existingBalanceUserIds.has(userId.toString())) { // Utilisateur a déjà une balance - ajouter les crédits const updateResult = await db.collection("balances").updateOne( { user: userId }, { $inc: { tokenCredits: CREDITS_TO_ADD }, $set: { lastRefill: new Date() }, } ); if (updateResult.modifiedCount > 0) { updatedCount++; totalCreditsAdded += CREDITS_TO_ADD; console.log( `✅ Crédits ajoutés pour l'utilisateur: ${user.email || user.name}` ); } } else { // Utilisateur n'a pas de balance - créer une nouvelle balance const newBalance = { user: userId, tokenCredits: CREDITS_TO_ADD, autoRefillEnabled: false, lastRefill: new Date(), refillAmount: 0, refillIntervalUnit: "month", refillIntervalValue: 1, __v: 0, }; await db.collection("balances").insertOne(newBalance); createdCount++; totalCreditsAdded += CREDITS_TO_ADD; console.log( `🆕 Nouvelle balance créée pour: ${user.email || user.name}` ); } } console.log(`✅ TERMINÉ:`); console.log(`- Balances mises à jour: ${updatedCount}`); console.log(`- Nouvelles balances créées: ${createdCount}`); console.log( `- Total crédits ajoutés: ${totalCreditsAdded.toLocaleString()}` ); return NextResponse.json({ success: true, statistics: { totalUsers: users.length, updatedBalances: updatedCount, createdBalances: createdCount, creditsPerUser: CREDITS_TO_ADD, totalCreditsAdded, }, message: `${CREDITS_TO_ADD.toLocaleString()} crédits ajoutés à ${ users.length } utilisateurs (${updatedCount} mis à jour, ${createdCount} créés)`, }); } catch (error) { console.error("Erreur lors de l'ajout des crédits:", error); return NextResponse.json( { success: false, error: "Erreur serveur lors de l'ajout des crédits", }, { status: 500 } ); } } // Endpoint pour vérifier les crédits actuels export async function GET() { try { const db = await getDatabase(); const users = await db.collection("users").find({}).toArray(); const balances = await db.collection("balances").find({}).toArray(); const totalCredits = balances.reduce( (sum, balance) => sum + (balance.tokenCredits || 0), 0 ); const averageCredits = balances.length > 0 ? totalCredits / balances.length : 0; return NextResponse.json({ statistics: { totalUsers: users.length, totalBalances: balances.length, totalCredits, averageCredits: Math.round(averageCredits), usersWithoutBalance: users.length - balances.length, }, }); } catch (error) { console.error("Erreur lors de la récupération des statistiques:", error); return NextResponse.json({ error: "Erreur serveur" }, { status: 500 }); } }