fix bug name quizzes

This commit is contained in:
corenthin-lebreton 2026-02-27 00:26:35 +01:00
parent 2069dbd0de
commit 9d0c25ea3c

View File

@ -13,15 +13,23 @@ export default async function QuizzesPage() {
const { data: { user }, error: authError } = await supabase.auth.getUser()
if (authError || !user) redirect('/login')
// Requêtes parallèles — les quizzes sont récupérés séparément avec un filtre
// explicite sur author_id pour éviter de dépendre de la RLS dans les nested selects
const [
{ data: categories },
{ data: allQuizzes },
{ count: totalQuizzes },
{ data: sessionIds },
] = await Promise.all([
db
.from('categories')
.select('id, name, description, subchapters(id, name, quizzes(id, title, updated_at))')
.select('id, name, description, subchapters(id, name)')
.order('name'),
db
.from('quizzes')
.select('id, title, updated_at, subchapter_id')
.eq('author_id', user.id)
.not('subchapter_id', 'is', null),
db
.from('quizzes')
.select('id', { count: 'exact', head: true })
@ -32,6 +40,12 @@ export default async function QuizzesPage() {
.eq('trainer_id', user.id),
])
// Index quizzes par subchapter_id pour le merge
const quizBySubchapter = new Map<string, any>()
for (const q of allQuizzes ?? []) {
quizBySubchapter.set(q.subchapter_id, q)
}
const ids = (sessionIds ?? []).map((s: any) => s.id)
const { count: totalStudents } = ids.length > 0
? await db
@ -40,14 +54,12 @@ export default async function QuizzesPage() {
.in('session_id', ids)
: { count: 0 }
// Supabase retourne `quizzes: null` (pas `[]`) quand un sous-chapitre n'a
// aucun quiz — on normalise pour éviter les crash .length côté client.
const normalizedCategories = (categories ?? []).map((cat: any) => ({
...cat,
subchapters: (cat.subchapters ?? []).map((sub: any) => ({
...sub,
quizzes: Array.isArray(sub.quizzes) ? sub.quizzes : [],
})),
subchapters: (cat.subchapters ?? []).map((sub: any) => {
const quiz = quizBySubchapter.get(sub.id)
return { ...sub, quizzes: quiz ? [quiz] : [] }
}),
}))
return (