Files
Dashboard/app/api/add-credits/route.ts
nBiqoz 0f2adca44a new
2025-10-06 19:16:20 +02:00

124 lines
4.1 KiB
TypeScript

import { NextResponse } from "next/server";
import { getDatabase } from "@/lib/db/mongodb";
export async function POST() {
try {
const db = await getDatabase();
const CREDITS_TO_ADD = 5000000; // 5 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 });
}
}