57 lines
1.8 KiB
TypeScript
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 "{code}" n'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 été 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}
|
|
/>
|
|
)
|
|
}
|