refactor: level model
This commit is contained in:
parent
5f361b2435
commit
157b200249
|
|
@ -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({
|
|
||||||
|
// Jika ada pembelajaran yang selesai, kita dapat memeriksa level berikutnya dari NEXT_LEARNING
|
||||||
|
if (lastCompletedLearning?.NEXT_LEARNING) {
|
||||||
|
currentLearningLevel = await models.Level.findOne({
|
||||||
where: {
|
where: {
|
||||||
ID_LEVEL: lastCompletedLearning.NEXT_LEARNING,
|
ID_LEVEL: lastCompletedLearning.NEXT_LEARNING,
|
||||||
IS_DELETED: 0,
|
IS_DELETED: 0,
|
||||||
},
|
},
|
||||||
attributes: ["ID_LEVEL", "NAME_LEVEL"],
|
attributes: ["ID_LEVEL", "NAME_LEVEL"],
|
||||||
})
|
});
|
||||||
: null;
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
|
||||||
|
const isUnlocked = unlockedLevelNames.includes(levelJSON.NAME_LEVEL);
|
||||||
|
|
||||||
|
if (isUnlocked) {
|
||||||
return {
|
return {
|
||||||
NAME_SECTION,
|
NAME_SECTION,
|
||||||
NAME_TOPIC,
|
NAME_TOPIC,
|
||||||
...levelJSON,
|
...levelJSON,
|
||||||
ID_STUDENT_LEARNING,
|
ID_STUDENT_LEARNING,
|
||||||
SCORE,
|
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,
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
}));
|
}));
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user