backend_adaptive_learning/controllers/learningControllers/stdExercise.js

163 lines
4.4 KiB
JavaScript
Raw Normal View History

2024-09-13 13:03:35 +00:00
import response from "../../response.js";
import models from "../../models/index.js";
export const getStdExercises = async (req, res) => {
try {
const stdExercise = await models.StdExercise.findAll();
response(200, stdExercise, "Success", res);
} catch (error) {
console.log(error);
response(500, null, "Error retrieving student exercise data!", res);
}
};
export const getStdExerciseById = async (req, res) => {
try {
const { id } = req.params;
const stdExercise = await models.StdExercise.findByPk(id);
if (!stdExercise) {
return response(404, null, "Student exercise data not found", res);
}
response(200, stdExercise, "Success", res);
} catch (error) {
console.log(error);
res.status(500).json({ message: "Internal Server Error" });
}
};
export const stdAnswerExercise = async (req, res, next) => {
try {
const { answers } = req.body;
2024-09-13 13:03:35 +00:00
if (!Array.isArray(answers) || answers.length === 0) {
return response(400, null, "Answers array is required", res);
2024-09-13 13:03:35 +00:00
}
for (const answer of answers) {
const { ID_STUDENT_LEARNING, ID_ADMIN_EXERCISE, ANSWER_STUDENT } = answer;
2024-09-13 13:03:35 +00:00
if (!ID_STUDENT_LEARNING) {
return response(400, null, "Id student learning is required", res);
}
2024-09-13 13:03:35 +00:00
const existingStdLearning = await models.StdLearning.findByPk(
ID_STUDENT_LEARNING
);
if (!existingStdLearning) {
return response(404, null, "Id student learning not found", res);
}
2024-09-13 13:03:35 +00:00
if (!ID_ADMIN_EXERCISE) {
return response(400, null, "Id exercise is required", res);
}
2024-09-13 13:03:35 +00:00
const exercise = await models.Exercise.findOne({
where: {
ID_ADMIN_EXERCISE: ID_ADMIN_EXERCISE,
ID_LEVEL: existingStdLearning.ID_LEVEL,
},
});
if (!exercise) {
return response(404, null, "Exercise not found in this level", res);
}
2024-09-13 13:03:35 +00:00
if (!ANSWER_STUDENT) {
return response(400, null, "Answer is required", res);
}
2024-09-13 13:03:35 +00:00
const existingStdExercise = await models.StdExercise.findOne({
where: {
ID_STUDENT_LEARNING: ID_STUDENT_LEARNING,
ID_ADMIN_EXERCISE: ID_ADMIN_EXERCISE,
},
2024-09-13 13:03:35 +00:00
});
if (existingStdExercise) {
existingStdExercise.ANSWER_STUDENT = ANSWER_STUDENT;
await existingStdExercise.save();
} else {
await models.StdExercise.create({
ID_STUDENT_LEARNING,
ID_ADMIN_EXERCISE,
ANSWER_STUDENT,
});
}
2024-09-13 13:03:35 +00:00
}
req.params.id = answers[0].ID_STUDENT_LEARNING;
2024-09-13 13:03:35 +00:00
next();
} catch (error) {
console.log(error);
return response(
500,
null,
"Error creating or updating student exercise data!",
res
);
}
};
export const getStudentAnswersByStdLearningId = async (req, res) => {
2024-10-01 08:03:44 +00:00
try {
const { id } = req.params;
const stdLearning = await models.StdLearning.findByPk(id, {
include: [
{
model: models.StdExercise,
as: "stdExercises",
include: [
{
model: models.Exercise,
as: "stdExerciseExercises",
attributes: ["ID_ADMIN_EXERCISE", "TITLE", "QUESTION", "QUESTION_TYPE"],
},
],
attributes: [
"ID_STUDENT_EXERCISE",
"ANSWER_STUDENT",
"IS_CORRECT",
],
},
],
attributes: ["ID_STUDENT_LEARNING", "ID_LEVEL", "SCORE", "IS_PASS"],
});
if (!stdLearning) {
return res.status(404).json({
message: "Student learning data not found",
});
}
const sortedExercises = stdLearning.stdExercises.sort((a, b) => {
const titleA = a.stdExerciseExercises.TITLE.toUpperCase();
const titleB = b.stdExerciseExercises.TITLE.toUpperCase();
if (titleA < titleB) return -1;
if (titleA > titleB) return 1;
return 0;
});
const mappedExercises = sortedExercises.map((exercise) => ({
...exercise.toJSON(),
exerciseDetails: exercise.stdExerciseExercises,
stdExerciseExercises: undefined,
}));
return res.status(200).json({
message: "Student learning exercises retrieved successfully",
payload: {
2024-10-01 08:03:44 +00:00
...stdLearning.toJSON(),
stdExercises: mappedExercises,
},
});
} catch (error) {
console.error(error);
return res.status(500).json({
message: "Error retrieving student learning exercises",
});
}
};