user management
This commit is contained in:
@@ -2,7 +2,13 @@
|
||||
|
||||
import { useState } from "react";
|
||||
import { Button } from "@/components/ui/button";
|
||||
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card";
|
||||
import {
|
||||
Card,
|
||||
CardContent,
|
||||
CardDescription,
|
||||
CardHeader,
|
||||
CardTitle,
|
||||
} from "@/components/ui/card";
|
||||
import { Badge } from "@/components/ui/badge";
|
||||
import { Plus, DollarSign, Users, TrendingUp } from "lucide-react";
|
||||
|
||||
@@ -33,7 +39,7 @@ export default function AddCredits() {
|
||||
try {
|
||||
const response = await fetch("/api/add-credits");
|
||||
const data = await response.json();
|
||||
|
||||
|
||||
if (data.statistics) {
|
||||
setStats(data.statistics);
|
||||
}
|
||||
@@ -45,18 +51,22 @@ export default function AddCredits() {
|
||||
};
|
||||
|
||||
const addCreditsToAllUsers = async () => {
|
||||
if (!confirm("Êtes-vous sûr de vouloir ajouter 5 millions de crédits à TOUS les utilisateurs ? Cette action est irréversible.")) {
|
||||
if (
|
||||
!confirm(
|
||||
"Êtes-vous sûr de vouloir ajouter 5 millions de crédits à TOUS les utilisateurs ? Cette action est irréversible."
|
||||
)
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
setLoading(true);
|
||||
try {
|
||||
const response = await fetch("/api/add-credits", {
|
||||
method: "POST"
|
||||
method: "POST",
|
||||
});
|
||||
|
||||
|
||||
const data = await response.json();
|
||||
|
||||
|
||||
if (data.success) {
|
||||
setResult(data.statistics);
|
||||
// Rafraîchir les stats
|
||||
@@ -86,7 +96,7 @@ export default function AddCredits() {
|
||||
<CardContent className="space-y-4">
|
||||
{/* Bouton d'analyse */}
|
||||
<div className="flex gap-2">
|
||||
<Button
|
||||
<Button
|
||||
onClick={analyzeCurrentCredits}
|
||||
disabled={analyzing}
|
||||
variant="outline"
|
||||
@@ -103,9 +113,11 @@ export default function AddCredits() {
|
||||
<Users className="h-4 w-4 text-blue-600" />
|
||||
<span className="text-sm font-medium">Utilisateurs</span>
|
||||
</div>
|
||||
<p className="text-2xl font-bold text-blue-600">{stats.totalUsers}</p>
|
||||
<p className="text-2xl font-bold text-blue-600">
|
||||
{stats.totalUsers}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
<div className="bg-green-50 p-3 rounded-lg">
|
||||
<div className="flex items-center gap-2">
|
||||
<DollarSign className="h-4 w-4 text-green-600" />
|
||||
@@ -115,7 +127,7 @@ export default function AddCredits() {
|
||||
{stats.totalCredits.toLocaleString()}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
<div className="bg-purple-50 p-3 rounded-lg">
|
||||
<div className="flex items-center gap-2">
|
||||
<TrendingUp className="h-4 w-4 text-purple-600" />
|
||||
@@ -125,13 +137,15 @@ export default function AddCredits() {
|
||||
{stats.averageCredits.toLocaleString()}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
<div className="bg-orange-50 p-3 rounded-lg">
|
||||
<div className="flex items-center gap-2">
|
||||
<Users className="h-4 w-4 text-orange-600" />
|
||||
<span className="text-sm font-medium">Sans Balance</span>
|
||||
</div>
|
||||
<p className="text-2xl font-bold text-orange-600">{stats.usersWithoutBalance}</p>
|
||||
<p className="text-2xl font-bold text-orange-600">
|
||||
{stats.usersWithoutBalance}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
@@ -140,20 +154,26 @@ export default function AddCredits() {
|
||||
{stats && (
|
||||
<div className="border-t pt-4">
|
||||
<div className="bg-yellow-50 border border-yellow-200 rounded-lg p-4 mb-4">
|
||||
<h4 className="font-semibold text-yellow-800 mb-2">⚠️ Action Importante</h4>
|
||||
<h4 className="font-semibold text-yellow-800 mb-2">
|
||||
⚠️ Action Importante
|
||||
</h4>
|
||||
<p className="text-yellow-700 text-sm">
|
||||
Cette action va ajouter <strong>5,000,000 crédits</strong> à chacun des {stats.totalUsers} utilisateurs.
|
||||
Cette action va ajouter <strong>5,000,000 crédits</strong> à
|
||||
chacun des {stats.totalUsers} utilisateurs.
|
||||
<br />
|
||||
Total de crédits qui seront ajoutés: <strong>{(stats.totalUsers * 5000000).toLocaleString()}</strong>
|
||||
Total de crédits qui seront ajoutés:{" "}
|
||||
<strong>{(stats.totalUsers * 3000000).toLocaleString()}</strong>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<Button
|
||||
|
||||
<Button
|
||||
onClick={addCreditsToAllUsers}
|
||||
disabled={loading}
|
||||
className="w-full bg-green-600 hover:bg-green-700"
|
||||
>
|
||||
{loading ? "Ajout en cours..." : `Ajouter 5M crédits à ${stats.totalUsers} utilisateurs`}
|
||||
{loading
|
||||
? "Ajout en cours..."
|
||||
: `Ajouter 5M crédits à ${stats.totalUsers} utilisateurs`}
|
||||
</Button>
|
||||
</div>
|
||||
)}
|
||||
@@ -161,23 +181,33 @@ export default function AddCredits() {
|
||||
{/* Résultats */}
|
||||
{result && (
|
||||
<div className="border-t pt-4">
|
||||
<h4 className="font-semibold text-green-600 mb-3">✅ Crédits ajoutés avec succès !</h4>
|
||||
<h4 className="font-semibold text-green-600 mb-3">
|
||||
✅ Crédits ajoutés avec succès !
|
||||
</h4>
|
||||
<div className="grid grid-cols-2 gap-4 text-sm">
|
||||
<div>
|
||||
<span className="text-gray-600">Balances mises à jour:</span>
|
||||
<Badge variant="secondary" className="ml-2">{result.updatedBalances}</Badge>
|
||||
<Badge variant="secondary" className="ml-2">
|
||||
{result.updatedBalances}
|
||||
</Badge>
|
||||
</div>
|
||||
<div>
|
||||
<span className="text-gray-600">Nouvelles balances:</span>
|
||||
<Badge variant="secondary" className="ml-2">{result.createdBalances}</Badge>
|
||||
<Badge variant="secondary" className="ml-2">
|
||||
{result.createdBalances}
|
||||
</Badge>
|
||||
</div>
|
||||
<div>
|
||||
<span className="text-gray-600">Crédits par utilisateur:</span>
|
||||
<Badge variant="secondary" className="ml-2">{result.creditsPerUser.toLocaleString()}</Badge>
|
||||
<Badge variant="secondary" className="ml-2">
|
||||
{result.creditsPerUser.toLocaleString()}
|
||||
</Badge>
|
||||
</div>
|
||||
<div>
|
||||
<span className="text-gray-600">Total ajouté:</span>
|
||||
<Badge variant="secondary" className="ml-2">{result.totalCreditsAdded.toLocaleString()}</Badge>
|
||||
<Badge variant="secondary" className="ml-2">
|
||||
{result.totalCreditsAdded.toLocaleString()}
|
||||
</Badge>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -185,4 +215,4 @@ export default function AddCredits() {
|
||||
</CardContent>
|
||||
</Card>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user