diff --git a/src/components/High/Layout.tsx b/src/components/High/Layout.tsx
index 865deadd..81a6040e 100644
--- a/src/components/High/Layout.tsx
+++ b/src/components/High/Layout.tsx
@@ -37,7 +37,7 @@ export default function Layout({user, children, className, navDisabled = false,
/>
{children}
diff --git a/src/pages/(exam)/ExamPage.tsx b/src/pages/(exam)/ExamPage.tsx
index a4ae1c3f..83607752 100644
--- a/src/pages/(exam)/ExamPage.tsx
+++ b/src/pages/(exam)/ExamPage.tsx
@@ -5,7 +5,7 @@ import {Module} from "@/interfaces";
import Selection from "@/exams/Selection";
import Reading from "@/exams/Reading";
-import {Exam, UserSolution} from "@/interfaces/exam";
+import {Exam, InteractiveSpeakingExercise, SpeakingExercise, UserSolution, WritingExercise} from "@/interfaces/exam";
import Listening from "@/exams/Listening";
import Writing from "@/exams/Writing";
import {ToastContainer, toast} from "react-toastify";
@@ -134,16 +134,19 @@ export default function ExamPage({page}: Props) {
Promise.all(
exam.exercises.map(async (exercise) => {
- return (exam.module === "writing" ? evaluateWritingAnswer : evaluateSpeakingAnswer)(
- exams,
- exam.id,
- exercise.id,
- solutions.find((x) => x.exercise === exercise.id)!,
- ).then((response) => {
- if (response) {
- setUserSolutions([...userSolutions.filter((x) => x.exercise !== exercise.id), response]);
- }
- });
+ if (exercise.type === "writing")
+ return evaluateWritingAnswer(exercise, solutions.find((x) => x.exercise === exercise.id)!).then((response) => {
+ if (response) {
+ setUserSolutions([...userSolutions.filter((x) => x.exercise !== exercise.id), response]);
+ }
+ });
+
+ if (exercise.type === "interactiveSpeaking" || exercise.type === "speaking")
+ return evaluateSpeakingAnswer(exercise, solutions.find((x) => x.exercise === exercise.id)!).then((response) => {
+ if (response) {
+ setUserSolutions([...userSolutions.filter((x) => x.exercise !== exercise.id), response]);
+ }
+ });
}),
).finally(() => {
setIsEvaluationLoading(false);
diff --git a/src/utils/evaluation.ts b/src/utils/evaluation.ts
index b64b96ec..dd254cba 100644
--- a/src/utils/evaluation.ts
+++ b/src/utils/evaluation.ts
@@ -1,11 +1,17 @@
-import {Evaluation, Exam, SpeakingExam, SpeakingExercise, UserSolution, WritingExam, WritingExercise} from "@/interfaces/exam";
+import {
+ Evaluation,
+ Exam,
+ InteractiveSpeakingExercise,
+ SpeakingExam,
+ SpeakingExercise,
+ UserSolution,
+ WritingExam,
+ WritingExercise,
+} from "@/interfaces/exam";
import axios from "axios";
import {speakingReverseMarking, writingReverseMarking} from "./score";
-export const evaluateWritingAnswer = async (exams: Exam[], examId: string, exerciseId: string, solution: UserSolution) => {
- const writingExam = exams.find((x) => x.id === examId)! as WritingExam;
- const exercise = writingExam.exercises.find((x) => x.id === exerciseId)! as WritingExercise;
-
+export const evaluateWritingAnswer = async (exercise: WritingExercise, solution: UserSolution) => {
const response = await axios.post("/api/evaluate/writing", {
question: `${exercise.prompt} ${exercise.attachment ? exercise.attachment.description : ""}`.replaceAll("\n", ""),
answer: solution.solutions[0].solution.trim().replaceAll("\n", " "),
@@ -19,22 +25,19 @@ export const evaluateWritingAnswer = async (exams: Exam[], examId: string, exerc
missing: 0,
total: 100,
},
- solutions: [{id: exerciseId, solution: solution.solutions[0].solution, evaluation: response.data}],
+ solutions: [{id: exercise.id, solution: solution.solutions[0].solution, evaluation: response.data}],
};
}
return undefined;
};
-export const evaluateSpeakingAnswer = async (exams: Exam[], examId: string, exerciseId: string, solution: UserSolution) => {
- const speakingExam = exams.find((x) => x.id === examId)! as SpeakingExam;
- const exercise = speakingExam.exercises.find((x) => x.id === exerciseId);
-
+export const evaluateSpeakingAnswer = async (exercise: SpeakingExercise | InteractiveSpeakingExercise, solution: UserSolution) => {
switch (exercise?.type) {
case "speaking":
- return await evaluateSpeakingExercise(exercise, exerciseId, solution);
+ return await evaluateSpeakingExercise(exercise, exercise.id, solution);
case "interactiveSpeaking":
- return await evaluateInteractiveSpeakingExercise(exerciseId, solution);
+ return await evaluateInteractiveSpeakingExercise(exercise.id, solution);
default:
return undefined;
}