"use client"; import { useState } from "react"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { Alert, AlertDescription } from "@/components/ui/alert"; import { UserPlus, Loader2, CheckCircle, AlertCircle } from "lucide-react"; interface CreateUserResult { success: boolean; message: string; user?: { id: string; name: string; email: string; role: string; createdAt: string; }; error?: string; } export default function CreateUser() { const [formData, setFormData] = useState({ name: "", email: "", password: "", confirmPassword: "", role: "USER", }); const [isLoading, setIsLoading] = useState(false); const [result, setResult] = useState(null); const handleInputChange = (field: string, value: string) => { setFormData((prev) => ({ ...prev, [field]: value })); // Réinitialiser le résultat quand l'utilisateur modifie le formulaire if (result) { setResult(null); } }; const validateForm = () => { if (!formData.name.trim()) { return "Le nom est requis"; } if (!formData.email.trim()) { return "L'email est requis"; } if (!formData.password) { return "Le mot de passe est requis"; } if (formData.password.length < 8) { return "Le mot de passe doit contenir au moins 8 caractères"; } if (formData.password !== formData.confirmPassword) { return "Les mots de passe ne correspondent pas"; } const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; if (!emailRegex.test(formData.email)) { return "Format d'email invalide"; } return null; }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); const validationError = validateForm(); if (validationError) { setResult({ success: false, message: validationError, }); return; } setIsLoading(true); setResult(null); try { const response = await fetch("/api/create-user", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ name: formData.name.trim(), email: formData.email.trim().toLowerCase(), password: formData.password, role: formData.role, }), }); const data = await response.json(); if (response.ok) { setResult({ success: true, message: data.message, user: data.user, }); // Réinitialiser le formulaire en cas de succès setFormData({ name: "", email: "", password: "", confirmPassword: "", role: "USER", }); } else { setResult({ success: false, message: data.error || "Erreur lors de la création de l'utilisateur", }); } } catch (error) { console.error("Erreur lors de la création de l'utilisateur:", error); setResult({ success: false, message: "Erreur de connexion au serveur", }); } finally { setIsLoading(false); } }; return ( Créer un nouvel utilisateur
handleInputChange("name", e.target.value)} disabled={isLoading} required />
handleInputChange("email", e.target.value)} disabled={isLoading} required />
handleInputChange("password", e.target.value)} disabled={isLoading} required />
handleInputChange("confirmPassword", e.target.value) } disabled={isLoading} required />
{result && ( {result.success ? ( ) : ( )} {result.message} {result.success && result.user && (
Détails:
• ID: {result.user.id}
• Email: {result.user.email}
• Rôle: {result.user.role}
• Crédits initiaux: 3,000,000 tokens
)}
)}

Informations importantes :

  • • L'utilisateur recevra automatiquement 5,000,000 tokens
  • • Le mot de passe sera hashé de manière sécurisée
  • • L'email doit être unique dans le système
  • • L'utilisateur pourra se connecter immédiatement
); }