import { headers } from "next/headers"; import { auth } from "@/lib/auth"; import { redirect } from "next/navigation"; import { prisma } from "@/lib/prisma"; import Link from "next/link"; export default async function StudentDashboard() { const session = await auth.api.getSession({ headers: await headers() }); if (!session) redirect("/login"); const enrollments = await prisma.courseEnrollment.findMany({ where: { userId: session.user.id }, include: { course: { include: { modules: { include: { _count: { select: { lessons: true } } }, }, _count: { select: { modules: true } }, }, }, }, orderBy: { enrolledAt: "desc" }, }); const now = new Date(); const active = enrollments.filter((e) => !e.expiresAt || e.expiresAt > now); const expired = enrollments.filter((e) => e.expiresAt && e.expiresAt <= now); return (

Мои курсы

{active.length} активных курсов

{active.length === 0 ? (

📚

Доступных курсов пока нет

Обратитесь к администратору за доступом

) : (
{active.map(({ course, expiresAt }) => { const totalLessons = course.modules.reduce((s, m) => s + m._count.lessons, 0); return ( {course.coverImage ? ( // eslint-disable-next-line @next/next/no-img-element {course.title} ) : (
📚
)}

{course.title}

{course.description && (

{course.description}

)}
{course._count.modules} модулей · {totalLessons} уроков {expiresAt && ( до {new Date(expiresAt).toLocaleDateString("ru-RU")} )}
); })}
)} {expired.length > 0 && (

Доступ истёк

{expired.map(({ course, expiresAt }) => (
{course.title} Истёк {new Date(expiresAt!).toLocaleDateString("ru-RU")}
))}
)}
); }