import { useState } from "react"; import { useQuery, useMutation } from "@tanstack/react-query"; import Sidebar from "@/components/sidebar"; import TopBar from "@/components/topbar"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { Textarea } from "@/components/ui/textarea"; import { useToast } from "@/hooks/use-toast"; import { apiRequest, queryClient } from "@/lib/queryClient"; import { Database, Download, Play } from "lucide-react"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"; export default function SqlAdmin() { const [sidebarOpen, setSidebarOpen] = useState(false); const { toast } = useToast(); const [sqlQuery, setSqlQuery] = useState(""); const [queryResult, setQueryResult] = useState(null); // Charger la liste des tables const { data: tablesData } = useQuery({ queryKey: ["/api/sql/tables"], }); // Mutation pour exécuter une requête SQL const executeSqlMutation = useMutation({ mutationFn: async (query: string) => { const res = await apiRequest("POST", "/api/sql/execute", { query }); return await res.json(); }, onSuccess: (data) => { setQueryResult(data); if (data.success) { toast({ title: "Requête exécutée", description: "La requête SQL a été exécutée avec succès", }); } }, onError: (error: any) => { toast({ variant: "destructive", title: "Erreur SQL", description: error.message || "Erreur lors de l'exécution de la requête", }); }, }); const handleExecuteQuery = () => { if (!sqlQuery.trim()) { toast({ variant: "destructive", title: "Erreur", description: "Veuillez entrer une requête SQL", }); return; } executeSqlMutation.mutate(sqlQuery); }; const handleDownloadResult = () => { if (!queryResult?.result) return; const json = JSON.stringify(queryResult.result, null, 2); const blob = new Blob([json], { type: "application/json" }); const url = URL.createObjectURL(blob); const a = document.createElement("a"); a.href = url; a.download = `sql-result-${Date.now()}.json`; a.click(); URL.revokeObjectURL(url); }; const insertTable = (tableName: string) => { setSqlQuery(`SELECT * FROM ${tableName} LIMIT 10;`); }; return (
{sidebarOpen && (
setSidebarOpen(false)} /> )}
setSidebarOpen(!sidebarOpen)} />

Administration SQL

Exécutez des requêtes SQL et gérez votre base de données

{/* Liste des tables */} Tables disponibles Cliquez pour insérer dans la requête
{(tablesData as any)?.tables?.map((table: any) => ( ))}
{/* Éditeur SQL et résultats */}
Éditeur SQL Entrez votre requête SQL ci-dessous