import { createClient } from "@/lib/supabase/server"; import ModuleCard from "@/components/dashboard/ModuleCard"; import ProgressBar from "@/components/dashboard/ProgressBar"; import type { Module, UserProgress } from "@/types/database.types"; export const runtime = "nodejs"; export default async function FormationsPage() { const supabase = await createClient(); const { data: { user }, } = await supabase.auth.getUser(); // 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 }; // Grouper les modules par semaine const modulesByWeek = (modules || []).reduce( (acc, module) => { const week = module.week_number; if (!acc[week]) acc[week] = []; acc[week].push(module); return acc; }, {} as Record ); const totalModules = modules?.length || 0; const completedModules = progress?.filter((p) => p.completed).length || 0; const progressPercent = totalModules > 0 ? (completedModules / totalModules) * 100 : 0; return (
{/* Header */}

Formations

Progression dans le programme HookLab - 8 semaines.

{/* Modules par semaine */} {Object.entries(modulesByWeek).map(([week, weekModules]) => { const weekCompleted = weekModules?.filter((m) => progress?.find((p) => p.module_id === m.id && p.completed) ).length || 0; const weekTotal = weekModules?.length || 0; return (

Semaine {week}

{weekCompleted}/{weekTotal} complétés
{weekModules?.map((module) => { const moduleProgress = progress?.find( (p) => p.module_id === module.id ); return ( ); })}
); })} {/* Message si aucun module */} {totalModules === 0 && (
📚

Aucun module disponible

Les modules de formation seront bientôt disponibles.

)}
); }