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." });
}
// Mencari pembelajaran terakhir yang selesai
const lastCompletedLearning = await models.StdLearning.findOne({
where: {
ID: ID,
@ -287,23 +288,29 @@ export const getLevelsByTopicId = async (req, res) => {
order: [["STUDENT_FINISH", "DESC"]],
});
const nextLearningLevel = lastCompletedLearning?.NEXT_LEARNING
? await models.Level.findOne({
let currentLearningLevel = 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"],
})
: null;
});
}
const nextLearningLevel = currentLearningLevel;
// Memasukkan level berikutnya (jika ada) ke dalam UNLOCKED_LEVELS
const unlockedLevels = lastCompletedLearning
? await models.Level.findAll({
where: {
ID_TOPIC: idTopic,
IS_DELETED: 0,
[models.Op.or]: [
{ NAME_LEVEL: { [models.Op.lt]: nextLearningLevel.NAME_LEVEL } },
{ NAME_LEVEL: { [models.Op.lt]: nextLearningLevel?.NAME_LEVEL } },
{ NAME_LEVEL: "Pretest" },
],
},
@ -312,6 +319,13 @@ export const getLevelsByTopicId = async (req, res) => {
})
: [{ 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 SCORE =
level.stdLearning && level.stdLearning.length > 0
@ -330,13 +344,25 @@ export const getLevelsByTopicId = async (req, res) => {
delete levelJSON.levelTopic;
delete levelJSON.levelTopic?.topicSection;
const isUnlocked = unlockedLevelNames.includes(levelJSON.NAME_LEVEL);
if (isUnlocked) {
return {
NAME_SECTION,
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) => {
@ -361,10 +387,10 @@ export const getLevelsByTopicId = async (req, res) => {
? nextLearningLevel.NAME_LEVEL
: null,
FINISHED_AT: lastCompletedLearning.STUDENT_FINISH,
UNLOCKED_LEVELS: unlockedLevels.map((lvl) => lvl.NAME_LEVEL),
UNLOCKED_LEVELS: unlockedLevelNames,
}
: {
UNLOCKED_LEVELS: ["Pretest"],
UNLOCKED_LEVELS: unlockedLevelNames,
},
levels: sortedLevels,
};

View File

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