import type { Metadata } from 'next'; import Link from 'next/link'; import { redirect } from 'next/navigation'; import { erfordereBenutzer } from '@/lib/auth/rechte'; import { inhalte } from '@/lib/inhalte'; import { alsKartenstand, staendeVon } from '@/lib/repos/karten'; import { fach, fachNamen, heutigerStapel } from '@/lib/lernen/sm2'; import { heute } from '@/lib/zeit'; import { Lernmodus, type Lernkarte } from './Lernmodus'; export const metadata: Metadata = { title: 'Lernmodus' }; export const dynamic = 'force-dynamic'; const STAPELGROESSE = 20; export default async function LernSeite({ searchParams }: { searchParams: Promise<{ block?: string }> }) { const benutzer = await erfordereBenutzer(); if (benutzer.rolle !== 'azubi') redirect('/karten'); const { block } = await searchParams; const alle = inhalte(); const gewaehlterBlock = block && alle.blockNach.has(block) ? block : undefined; const staende = staendeVon(benutzer.id); const heuteDatum = heute(); const faellige = heutigerStapel( alle.karten.map((karte) => ({ karteId: karte.id, faelligAm: staende.get(karte.id)?.faelligAm ?? null, block: karte.block, })), heuteDatum, STAPELGROESSE, gewaehlterBlock, ); const karten: Lernkarte[] = faellige.map((eintrag) => { const karte = alle.karteNach.get(eintrag.karteId)!; const stand = alsKartenstand(staende.get(karte.id)); return { id: karte.id, frage: karte.frage, antwort: karte.antwort, handoutId: karte.handoutId, handoutTitel: karte.handoutTitel, blockTitel: alle.blockNach.get(karte.block)?.titel ?? karte.block, fach: fach(stand), fachName: fachNamen[fach(stand)] ?? '', }; }); if (karten.length === 0) { return (
{gewaehlterBlock ? 'In diesem Themenblock ist heute keine Karte dran.' : 'Alle Karten sitzen gerade fest genug. Morgen kommt der nächste Stapel.'}