Merge exams grading into homework
Some checks failed
CI / build-and-test (push) Failing after 3m34s
CI / deploy (push) Has been skipped

Redirect /teacher/exams/grading* to /teacher/homework/submissions; remove exam grading UI/actions/data-access; add homework student workflow and update design docs.
This commit is contained in:
SpecialX
2025-12-31 11:59:03 +08:00
parent f8e39f518d
commit 13e91e628d
36 changed files with 4491 additions and 452 deletions

View File

@@ -57,9 +57,6 @@ async function ExamsResults({ searchParams }: { searchParams: Promise<SearchPara
<Badge variant="outline">Archived {counts.archived}</Badge>
</div>
<div className="flex items-center gap-2">
<Button asChild variant="outline" size="sm">
<Link href="/teacher/exams/grading">Go to Grading</Link>
</Button>
<Button asChild size="sm">
<Link href="/teacher/exams/create" className="inline-flex items-center gap-2">
<PlusCircle className="h-4 w-4" />

View File

@@ -1,40 +1,6 @@
import { notFound } from "next/navigation"
import { GradingView } from "@/modules/exams/components/grading-view"
import { getSubmissionDetails } from "@/modules/exams/data-access"
import { formatDate } from "@/shared/lib/utils"
import { redirect } from "next/navigation"
export default async function SubmissionGradingPage({ params }: { params: Promise<{ submissionId: string }> }) {
const { submissionId } = await params
const submission = await getSubmissionDetails(submissionId)
if (!submission) {
return notFound()
}
return (
<div className="flex h-full flex-col space-y-4 p-6">
<div className="flex items-center justify-between">
<div>
<h2 className="text-2xl font-bold tracking-tight">{submission.examTitle}</h2>
<div className="flex items-center gap-4 text-sm text-muted-foreground mt-1">
<span>Student: <span className="font-medium text-foreground">{submission.studentName}</span></span>
<span></span>
<span>Submitted: {submission.submittedAt ? formatDate(submission.submittedAt) : "-"}</span>
<span></span>
<span className="capitalize">Status: {submission.status}</span>
</div>
</div>
</div>
<GradingView
submissionId={submission.id}
studentName={submission.studentName}
examTitle={submission.examTitle}
submittedAt={submission.submittedAt}
status={submission.status || "started"}
totalScore={submission.totalScore}
answers={submission.answers}
/>
</div>
)
await params
redirect("/teacher/homework/submissions")
}

View File

@@ -1,22 +1,5 @@
import { SubmissionDataTable } from "@/modules/exams/components/submission-data-table"
import { submissionColumns } from "@/modules/exams/components/submission-columns"
import { getExamSubmissions } from "@/modules/exams/data-access"
import { redirect } from "next/navigation"
export default async function ExamGradingPage() {
const submissions = await getExamSubmissions()
return (
<div className="flex h-full flex-col space-y-8 p-8">
<div className="flex items-center justify-between">
<div>
<h2 className="text-2xl font-bold tracking-tight">Grading</h2>
<p className="text-muted-foreground">Grade student exam submissions.</p>
</div>
</div>
<div className="rounded-md border bg-card">
<SubmissionDataTable columns={submissionColumns} data={submissions} />
</div>
</div>
)
redirect("/teacher/homework/submissions")
}