import { prisma } from "@/lib/prisma"; import { notFound } from "next/navigation"; import Link from "next/link"; import { FeedbackForm } from "./feedback-form"; interface Props { params: Promise<{ submissionId: string }>; } function formatSize(bytes: number) { if (bytes < 1024) return `${bytes} Б`; if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(0)} КБ`; return `${(bytes / 1024 / 1024).toFixed(1)} МБ`; } export default async function SubmissionPage({ params }: Props) { const { submissionId } = await params; const submission = await prisma.homeworkSubmission.findUnique({ where: { id: submissionId }, include: { user: { select: { name: true, email: true } }, feedbacks: { include: { curator: { select: { name: true } } }, orderBy: { createdAt: "desc" }, }, homework: { include: { lesson: { select: { title: true, module: { select: { title: true, course: { select: { title: true } } } }, }, }, }, }, }, }); if (!submission) notFound(); const files = (submission.files as { name: string; url: string; size: number }[]) ?? []; const isReviewed = submission.feedbacks.length > 0; return (
{/* Meta */}

{submission.homework.lesson.title}

{submission.homework.lesson.module.course.title} · {submission.homework.lesson.module.title}

{/* Student info */}

{submission.user.name}

{submission.user.email}

Сдано {new Date(submission.submittedAt).toLocaleDateString("ru-RU")}

{/* Homework description */}

Задание

{submission.homework.description}
{/* Student answer */}

Ответ студента

{submission.text ? (
{submission.text}
) : (

Текст не добавлен

)}
{/* Files */} {files.length > 0 && (

Прикреплённые файлы

{files.map((f) => ( 📎 {f.name} {formatSize(f.size)} ))}
)} {/* Existing feedback */} {submission.feedbacks.map((fb) => (

Фидбек

{fb.curator.name} · {new Date(fb.createdAt).toLocaleDateString("ru-RU")}

{fb.text}

))} {/* Feedback form */} {!isReviewed && }
); }