124 lines
4.1 KiB
TypeScript
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 });
|
|
}
|
|
} |