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 (
Vue d'ensemble de HookLab.
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
Aucune candidature.
) : (Gérer les candidatures
{pendingCount} en attente de traitement
Ajouter un cours
{publishedModules} cours publiés