44 lines
1.2 KiB
TypeScript
44 lines
1.2 KiB
TypeScript
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
import { createClient } from '@/lib/supabase/server'
|
|
import QuizzesClient from './QuizzesClient'
|
|
|
|
export default async function QuizzesPage() {
|
|
const supabase = await createClient()
|
|
const db = supabase as any
|
|
const { data: { user } } = await supabase.auth.getUser()
|
|
|
|
const { data: categories } = await db
|
|
.from('categories')
|
|
.select(`id, name, description, subchapters(id, name, quizzes(id, title, updated_at))`)
|
|
.order('name')
|
|
|
|
const { count: totalQuizzes } = await db
|
|
.from('quizzes')
|
|
.select('id', { count: 'exact', head: true })
|
|
.eq('author_id', user!.id)
|
|
|
|
const { data: sessionIds } = await db
|
|
.from('sessions')
|
|
.select('id')
|
|
.eq('trainer_id', user!.id)
|
|
|
|
const ids = (sessionIds ?? []).map((s: any) => s.id)
|
|
const { count: totalStudents } = ids.length > 0
|
|
? await db
|
|
.from('student_participations')
|
|
.select('id', { count: 'exact', head: true })
|
|
.in('session_id', ids)
|
|
: { count: 0 }
|
|
|
|
return (
|
|
<QuizzesClient
|
|
initialCategories={categories ?? []}
|
|
stats={{
|
|
totalQuizzes: totalQuizzes ?? 0,
|
|
totalCategories: categories?.length ?? 0,
|
|
activeStudents: totalStudents ?? 0,
|
|
}}
|
|
/>
|
|
)
|
|
}
|