import { createAdminClient } from "@/lib/supabase/server"; import Link from "next/link"; export const runtime = "nodejs"; export default async function AdminDashboard() { const supabase = createAdminClient(); // Récupérer les stats en parallèle const [candidaturesRes, modulesRes, profilesRes] = await Promise.all([ supabase.from("candidatures").select("*"), supabase.from("modules").select("*"), supabase.from("profiles").select("*"), ]); const candidatures = (candidaturesRes.data || []) as { id: string; status: string; created_at: string }[]; const modules = (modulesRes.data || []) as { id: string; is_published: boolean }[]; const profiles = (profilesRes.data || []) as { id: string; subscription_status: string; created_at: string }[]; const pendingCount = candidatures.filter((c) => c.status === "pending").length; const approvedCount = candidatures.filter((c) => c.status === "approved").length; const publishedModules = modules.filter((m) => m.is_published).length; const activeUsers = profiles.filter((p) => p.subscription_status === "active").length; // Candidatures récentes (5 dernières) const recentCandidatures = candidatures .sort((a, b) => new Date(b.created_at).getTime() - new Date(a.created_at).getTime()) .slice(0, 5); return (

Dashboard Admin

Vue d'ensemble de HookLab.

{/* Stats cards */}

Candidatures en attente

{pendingCount}

{candidatures.length} au total

Candidatures approuvées

{approvedCount}

{candidatures.length > 0 ? Math.round((approvedCount / candidatures.length) * 100) : 0}% de conversion

Utilisateurs actifs

{activeUsers}

{profiles.length} inscrits

Cours publiés

{publishedModules}

{modules.length} au total

{/* Actions rapides */}
{/* Candidatures récentes */}

Candidatures récentes

Tout voir
{recentCandidatures.length === 0 ? (

Aucune candidature.

) : (
{recentCandidatures.map((c) => (
{new Date(c.created_at).toLocaleDateString("fr-FR", { day: "numeric", month: "short", })} {c.status === "pending" ? "En attente" : c.status === "approved" ? "Approuvée" : "Rejetée"}
))}
)}
{/* Actions rapides */}

Actions rapides

Gérer les candidatures

{pendingCount} en attente de traitement

Ajouter un cours

{publishedModules} cours publiés

); }