diff --git a/controllers/contentControllers/exercise.js b/controllers/contentControllers/exercise.js index eef569a..f3230f5 100644 --- a/controllers/contentControllers/exercise.js +++ b/controllers/contentControllers/exercise.js @@ -221,7 +221,7 @@ export const getExerciseByLevelId = async (req, res) => { if (exerciseData.multipleChoices) { exerciseData.multipleChoices = exerciseData.multipleChoices.map( (choice) => { - const { ANSWER_KEY, ...rest } = choice.dataValues; // Exclude ANSWER_KEY + const { ANSWER_KEY, ...rest } = choice.dataValues; return rest; } ); @@ -231,10 +231,7 @@ export const getExerciseByLevelId = async (req, res) => { } else if (questionType === "MPQ") { if (exerciseData.matchingPairs) { exerciseData.matchingPairs = exerciseData.matchingPairs.map( - (pair) => { - const { LEFT_PAIR, RIGHT_PAIR, ...rest } = pair.dataValues; // Exclude LEFT_PAIR, RIGHT_PAIR - return rest; - } + (pair) => pair.dataValues ); } delete exerciseData.multipleChoices; @@ -242,7 +239,7 @@ export const getExerciseByLevelId = async (req, res) => { } else if (questionType === "TFQ") { if (exerciseData.trueFalse) { exerciseData.trueFalse = exerciseData.trueFalse.map((tf) => { - const { IS_TRUE, ...rest } = tf.dataValues; // Exclude IS_TRUE + const { IS_TRUE, ...rest } = tf.dataValues; return rest; }); } diff --git a/controllers/learningControllers/stdExercise.js b/controllers/learningControllers/stdExercise.js index a2c46cd..cefc9b8 100644 --- a/controllers/learningControllers/stdExercise.js +++ b/controllers/learningControllers/stdExercise.js @@ -98,3 +98,7 @@ export const stdAnswerExercise = async (req, res, next) => { ); } }; + +export const getStudentAnswersByStdLearningId = async (req, res) => { + +} \ No newline at end of file diff --git a/controllers/learningControllers/stdLearning.js b/controllers/learningControllers/stdLearning.js index 7c57d4f..14e7399 100644 --- a/controllers/learningControllers/stdLearning.js +++ b/controllers/learningControllers/stdLearning.js @@ -34,13 +34,18 @@ export const createStdLearning = async (req, res) => { return response(401, null, "User not authenticated", res); } - if (!ID_LEVEL) { - return response(400, null, "Level ID is required", res); - } - const ID = req.user.ID; try { + if (req.stdLearning) { + return response( + 200, + req.stdLearning, + "Student Learning data found and reused", + res + ); + } + const level = await models.Level.findByPk(ID_LEVEL); if (!level) { return response(404, null, "Level not found", res); @@ -214,7 +219,9 @@ export const learningScoreByStdLearningId = async (req, res) => { ? stdLearning.learningUser.students.NISN : null, ID_LEVEL: stdLearning.level ? stdLearning.level.ID_LEVEL : null, - CURRENT_LEVEL_NAME: stdLearning.level ? stdLearning.level.NAME_LEVEL : null, + CURRENT_LEVEL_NAME: stdLearning.level + ? stdLearning.level.NAME_LEVEL + : null, SCORE: stdLearning.SCORE, NEXT_LEARNING: stdLearning.NEXT_LEARNING, NEXT_LEARNING_NAME: stdLearning.nextLevel.NAME_LEVEL, diff --git a/middlewares/checkStdLearning.js b/middlewares/checkStdLearning.js new file mode 100644 index 0000000..200c7a4 --- /dev/null +++ b/middlewares/checkStdLearning.js @@ -0,0 +1,35 @@ +import models from "../models/index.js"; +import response from "../response.js"; + +export const checkStdLearning = async (req, res, next) => { + const { ID_LEVEL } = req.body; + + if (!req.user) { + return response(401, null, "User not authenticated", res); + } + + if (!ID_LEVEL) { + return response(400, null, "Level ID is required", res); + } + + const ID = req.user.ID; + + try { + const existingStdLearning = await models.StdLearning.findOne({ + where: { + ID: ID, + ID_LEVEL: ID_LEVEL, + }, + }); + + if (existingStdLearning && existingStdLearning.SCORE === null) { + req.stdLearning = existingStdLearning; + return next(); + } + + return next(); + } catch (error) { + console.log(error); + return response(500, null, "Internal Server Error", res); + } +}; diff --git a/models/usersModels/studentModel.js b/models/usersModels/studentModel.js index e5fd107..56b5266 100644 --- a/models/usersModels/studentModel.js +++ b/models/usersModels/studentModel.js @@ -15,10 +15,7 @@ const StudentModel = (DataTypes) => { }, ID_CLASS: { type: DataTypes.UUID, - allowNull: false, - validate: { - notEmpty: true, - }, + allowNull: true, references: { model: "class", key: "ID_CLASS", diff --git a/routes/learning/stdLearning.js b/routes/learning/stdLearning.js index f6df1bd..a907a18 100644 --- a/routes/learning/stdLearning.js +++ b/routes/learning/stdLearning.js @@ -1,5 +1,6 @@ import express from "express"; import { getStdLearnings, getStdLearningById, createStdLearning, learningScoreByStdLearningId, learningHistory, learningHistoryBySectionId, learningHistoryByTopicId, getLastCreatedStdLearningByLevelId } from "../../controllers/learningControllers/stdLearning.js"; +import { checkStdLearning } from "../../middlewares/checkStdLearning.js"; import { verifyLoginUser } from "../../middlewares/User/authUser.js"; const router = express.Router(); @@ -18,6 +19,6 @@ router.get("/learningHistory/topic/:topicId", verifyLoginUser, learningHistoryBy router.get("/stdLearning/level/:levelId", verifyLoginUser, getLastCreatedStdLearningByLevelId); -router.post("/stdLearning", verifyLoginUser, createStdLearning); +router.post("/stdLearning", verifyLoginUser, checkStdLearning, createStdLearning); export default router \ No newline at end of file