refactor: level model

This commit is contained in:
elangptra 2024-10-10 10:31:44 +07:00
parent 5f361b2435
commit 157b200249
2 changed files with 46 additions and 20 deletions

View File

@ -272,6 +272,7 @@ export const getLevelsByTopicId = async (req, res) => {
.json({ message: "No levels found for the given topic." }); .json({ message: "No levels found for the given topic." });
} }
// Mencari pembelajaran terakhir yang selesai
const lastCompletedLearning = await models.StdLearning.findOne({ const lastCompletedLearning = await models.StdLearning.findOne({
where: { where: {
ID: ID, ID: ID,
@ -287,23 +288,29 @@ export const getLevelsByTopicId = async (req, res) => {
order: [["STUDENT_FINISH", "DESC"]], order: [["STUDENT_FINISH", "DESC"]],
}); });
const nextLearningLevel = lastCompletedLearning?.NEXT_LEARNING let currentLearningLevel = null;
? await models.Level.findOne({
where: {
ID_LEVEL: lastCompletedLearning.NEXT_LEARNING,
IS_DELETED: 0,
},
attributes: ["ID_LEVEL", "NAME_LEVEL"],
})
: null;
// Jika ada pembelajaran yang selesai, kita dapat memeriksa level berikutnya dari NEXT_LEARNING
if (lastCompletedLearning?.NEXT_LEARNING) {
currentLearningLevel = await models.Level.findOne({
where: {
ID_LEVEL: lastCompletedLearning.NEXT_LEARNING,
IS_DELETED: 0,
},
attributes: ["ID_LEVEL", "NAME_LEVEL"],
});
}
const nextLearningLevel = currentLearningLevel;
// Memasukkan level berikutnya (jika ada) ke dalam UNLOCKED_LEVELS
const unlockedLevels = lastCompletedLearning const unlockedLevels = lastCompletedLearning
? await models.Level.findAll({ ? await models.Level.findAll({
where: { where: {
ID_TOPIC: idTopic, ID_TOPIC: idTopic,
IS_DELETED: 0, IS_DELETED: 0,
[models.Op.or]: [ [models.Op.or]: [
{ NAME_LEVEL: { [models.Op.lt]: nextLearningLevel.NAME_LEVEL } }, { NAME_LEVEL: { [models.Op.lt]: nextLearningLevel?.NAME_LEVEL } },
{ NAME_LEVEL: "Pretest" }, { NAME_LEVEL: "Pretest" },
], ],
}, },
@ -312,6 +319,13 @@ export const getLevelsByTopicId = async (req, res) => {
}) })
: [{ NAME_LEVEL: "Pretest" }]; : [{ NAME_LEVEL: "Pretest" }];
const unlockedLevelNames = unlockedLevels.map((lvl) => lvl.NAME_LEVEL);
// Menambahkan level berikutnya ke dalam UNLOCKED_LEVELS jika belum termasuk
if (nextLearningLevel && !unlockedLevelNames.includes(nextLearningLevel.NAME_LEVEL)) {
unlockedLevelNames.push(nextLearningLevel.NAME_LEVEL);
}
const levelsWithScore = levels.map((level) => { const levelsWithScore = levels.map((level) => {
const SCORE = const SCORE =
level.stdLearning && level.stdLearning.length > 0 level.stdLearning && level.stdLearning.length > 0
@ -330,13 +344,25 @@ export const getLevelsByTopicId = async (req, res) => {
delete levelJSON.levelTopic; delete levelJSON.levelTopic;
delete levelJSON.levelTopic?.topicSection; delete levelJSON.levelTopic?.topicSection;
return { const isUnlocked = unlockedLevelNames.includes(levelJSON.NAME_LEVEL);
NAME_SECTION,
NAME_TOPIC, if (isUnlocked) {
...levelJSON, return {
ID_STUDENT_LEARNING, NAME_SECTION,
SCORE, NAME_TOPIC,
}; ...levelJSON,
ID_STUDENT_LEARNING,
SCORE,
IS_PRETEST: levelJSON.NAME_LEVEL === "Pretest" ? 1 : 0,
};
} else {
return {
ID_LEVEL: levelJSON.ID_LEVEL,
NAME_LEVEL: levelJSON.NAME_LEVEL,
IS_PRETEST: levelJSON.NAME_LEVEL === "Pretest" ? 1 : 0,
SCORE,
};
}
}); });
const sortedLevels = levelsWithScore.sort((a, b) => { const sortedLevels = levelsWithScore.sort((a, b) => {
@ -361,10 +387,10 @@ export const getLevelsByTopicId = async (req, res) => {
? nextLearningLevel.NAME_LEVEL ? nextLearningLevel.NAME_LEVEL
: null, : null,
FINISHED_AT: lastCompletedLearning.STUDENT_FINISH, FINISHED_AT: lastCompletedLearning.STUDENT_FINISH,
UNLOCKED_LEVELS: unlockedLevels.map((lvl) => lvl.NAME_LEVEL), UNLOCKED_LEVELS: unlockedLevelNames,
} }
: { : {
UNLOCKED_LEVELS: ["Pretest"], UNLOCKED_LEVELS: unlockedLevelNames,
}, },
levels: sortedLevels, levels: sortedLevels,
}; };

View File

@ -119,9 +119,9 @@ export const getStudents = async (req, res) => {
const formattedStudents = students.map((student) => ({ const formattedStudents = students.map((student) => ({
ID: student.ID, ID: student.ID,
NISN: student.students.NISN,
NAME_USERS: student.NAME_USERS, NAME_USERS: student.NAME_USERS,
EMAIL: student.EMAIL, EMAIL: student.EMAIL,
NISN: student.students.NISN,
NAME_CLASS: student.students.studentClass.NAME_CLASS, NAME_CLASS: student.students.studentClass.NAME_CLASS,
ROLE: student.ROLE, ROLE: student.ROLE,
})); }));