SolyQuiz/app/quiz/[code]/page.tsx
corenthin-lebreton 28aa3b0e10 initial project
2026-02-26 20:10:14 +01:00

57 lines
1.8 KiB
TypeScript

/* eslint-disable @typescript-eslint/no-explicit-any */
import { createClient } from '@/lib/supabase/server'
import StudentJoinClient from './StudentJoinClient'
export default async function QuizJoinPage({
params,
}: {
params: Promise<{ code: string }>
}) {
const { code } = await params
const supabase = await createClient()
const db = supabase as any
const { data: session } = await db
.from('sessions')
.select(`id, short_code, is_active, school_name, class_name, quiz:quizzes(title)`)
.eq('short_code', code.toUpperCase())
.single()
if (!session) {
return (
<div className="min-h-screen bg-background flex items-center justify-center">
<div className="text-center">
<div className="text-6xl mb-4">🔍</div>
<h1 className="text-2xl font-bold text-text-primary mb-2">Session introuvable</h1>
<p className="text-text-secondary">Le code de session &quot;{code}&quot; n&apos;existe pas.</p>
</div>
</div>
)
}
if (!session.is_active) {
return (
<div className="min-h-screen bg-background flex items-center justify-center">
<div className="text-center max-w-md mx-auto px-4">
<div className="text-6xl mb-4">🏁</div>
<h1 className="text-2xl font-bold text-text-primary mb-3">Ce quiz est terminé</h1>
<p className="text-text-secondary">
La session <span className="font-mono font-bold text-primary">{session.short_code}</span> a é clôturée par le formateur.
Les nouvelles participations ne sont plus acceptées.
</p>
</div>
</div>
)
}
return (
<StudentJoinClient
sessionCode={session.short_code}
quizTitle={session.quiz?.title ?? 'Quiz'}
schoolName={session.school_name}
className={session.class_name}
sessionId={session.id}
/>
)
}