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 const runtime = "nodejs"; 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 (
Voici un apercu de ta progression dans le programme.
Progression globale
{Math.round(progressPercent)}%
Modules completes
{completedModules} /{totalModules}
Statut abonnement
Actif
Jusqu'au{" "} {new Date(profile.subscription_end_date).toLocaleDateString( "fr-FR" )}
)}Les modules de formation sont en cours de preparation. Tu seras notifie des qu'ils seront disponibles.