import { createClient } from "@/lib/supabase/server"; import Card from "@/components/ui/Card"; import ProgressBar from "@/components/dashboard/ProgressBar"; import ModuleCard from "@/components/dashboard/ModuleCard"; import type { Module, UserProgress, Profile } from "@/types/database.types"; export default async function DashboardPage() { const supabase = await createClient(); const { data: { user }, } = await supabase.auth.getUser(); // Récupérer le profil const { data: profile } = await supabase .from("profiles") .select("*") .eq("id", user!.id) .single() as { data: Profile | null }; // Récupérer les modules publiés const { data: modules } = await supabase .from("modules") .select("*") .eq("is_published", true) .order("week_number", { ascending: true }) .order("order_index", { ascending: true }) as { data: Module[] | null }; // Récupérer la progression const { data: progress } = await supabase .from("user_progress") .select("*") .eq("user_id", user!.id) as { data: UserProgress[] | null }; const totalModules = modules?.length || 0; const completedModules = progress?.filter((p) => p.completed).length || 0; const progressPercent = totalModules > 0 ? (completedModules / totalModules) * 100 : 0; // Prochain module non complété const completedIds = new Set( progress?.filter((p) => p.completed).map((p) => p.module_id) ); const nextModules = modules?.filter((m) => !completedIds.has(m.id)).slice(0, 3) || []; return (
{/* Header */}

Bonjour {profile?.full_name?.split(" ")[0] || "!"} 👋

Voici un apercu de ta progression dans le programme.

{/* Stats cards */}

Progression globale

{Math.round(progressPercent)}%

Modules completes

{completedModules} /{totalModules}

Statut abonnement

Actif

{profile?.subscription_end_date && (

Jusqu'au{" "} {new Date(profile.subscription_end_date).toLocaleDateString( "fr-FR" )}

)}
{/* Prochains modules */} {nextModules.length > 0 && (

Continue ta formation

{nextModules.map((module) => { const moduleProgress = progress?.find( (p) => p.module_id === module.id ); return ( ); })}
)} {/* Message si aucun module */} {totalModules === 0 && (
🚀

Le programme arrive bientot !

Les modules de formation sont en cours de preparation. Tu seras notifie des qu'ils seront disponibles.

)}
); }