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." });
|
||||
}
|
||||
|
||||
// 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({
|
||||
where: {
|
||||
ID_LEVEL: lastCompletedLearning.NEXT_LEARNING,
|
||||
IS_DELETED: 0,
|
||||
},
|
||||
attributes: ["ID_LEVEL", "NAME_LEVEL"],
|
||||
})
|
||||
: null;
|
||||
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"],
|
||||
});
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
return {
|
||||
NAME_SECTION,
|
||||
NAME_TOPIC,
|
||||
...levelJSON,
|
||||
ID_STUDENT_LEARNING,
|
||||
SCORE,
|
||||
};
|
||||
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,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
}));
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user