323 lines
9.8 KiB
JavaScript
323 lines
9.8 KiB
JavaScript
import models from "../../models/index.js";
|
|
import response from "../../response.js";
|
|
|
|
export const checkLevelsPerTopic = async (req, res, next) => {
|
|
const { ID_TOPIC } = req.body;
|
|
|
|
try {
|
|
const levelCount = await models.Level.count({
|
|
where: {
|
|
ID_TOPIC,
|
|
IS_DELETED: 0,
|
|
},
|
|
});
|
|
|
|
if (levelCount >= 7) {
|
|
return response(
|
|
400,
|
|
null,
|
|
"Cannot add more than 6 levels to a single topic",
|
|
res
|
|
);
|
|
}
|
|
|
|
next();
|
|
} catch (error) {
|
|
console.log(error);
|
|
return response(500, null, "Internal Server Error", res);
|
|
}
|
|
};
|
|
|
|
export const getSectionAndTopicByLevelId = async (req, res, next) => {
|
|
const { id } = req.params;
|
|
|
|
try {
|
|
const level = await models.Level.findByPk(id, {
|
|
attributes: ["ID_SECTION", "ID_TOPIC"],
|
|
});
|
|
|
|
if (!level) {
|
|
return response(404, null, "Level not found", res);
|
|
}
|
|
|
|
req.body.ID_SECTION = level.ID_SECTION;
|
|
req.body.ID_TOPIC = level.ID_TOPIC;
|
|
|
|
next();
|
|
} catch (error) {
|
|
console.log(error);
|
|
return response(500, null, "Internal Server Error", res);
|
|
}
|
|
};
|
|
|
|
export const autoCalculateRoutes = async (req, res, next) => {
|
|
const { NAME_LEVEL, ID_TOPIC } = req.body;
|
|
|
|
try {
|
|
let routes = {
|
|
ROUTE_1: 0,
|
|
ROUTE_2: 0,
|
|
ROUTE_3: 0,
|
|
ROUTE_4: 0,
|
|
ROUTE_5: 0,
|
|
ROUTE_6: 0,
|
|
};
|
|
|
|
const levelTitles = [
|
|
"Pretest",
|
|
"Level 1",
|
|
"Level 2",
|
|
"Level 3",
|
|
"Level 4",
|
|
"Level 5",
|
|
"Level 6",
|
|
];
|
|
|
|
const levels = await models.Level.findAll({
|
|
where: {
|
|
ID_TOPIC,
|
|
NAME_LEVEL: {
|
|
[models.Sequelize.Op.in]: levelTitles,
|
|
},
|
|
IS_DELETED: 0,
|
|
},
|
|
});
|
|
|
|
levels.sort(
|
|
(a, b) =>
|
|
levelTitles.indexOf(a.NAME_LEVEL) - levelTitles.indexOf(b.NAME_LEVEL)
|
|
);
|
|
|
|
const levelMap = {};
|
|
levels.forEach((level) => {
|
|
levelMap[level.NAME_LEVEL] = level.ID_LEVEL;
|
|
});
|
|
|
|
switch (NAME_LEVEL) {
|
|
case "Pretest":
|
|
req.body.IS_PRETEST = 1;
|
|
routes.ROUTE_1 = levelMap["Level 1"] || 0;
|
|
routes.ROUTE_2 = levelMap["Level 2"] || 0;
|
|
routes.ROUTE_3 = levelMap["Level 3"] || 0;
|
|
routes.ROUTE_4 = levelMap["Level 4"] || 0;
|
|
routes.ROUTE_5 = levelMap["Level 5"] || 0;
|
|
routes.ROUTE_6 = levelMap["Level 6"] || 0;
|
|
break;
|
|
case "Level 1":
|
|
routes.ROUTE_1 = levelMap["Pretest"] || 0;
|
|
routes.ROUTE_2 = levelMap["Level 2"] || 0;
|
|
routes.ROUTE_3 = levelMap["Level 3"] || 0;
|
|
routes.ROUTE_4 = levelMap["Level 4"] || 0;
|
|
routes.ROUTE_5 = levelMap["Level 5"] || 0;
|
|
routes.ROUTE_6 = levelMap["Level 6"] || 0;
|
|
break;
|
|
case "Level 2":
|
|
routes.ROUTE_1 = levelMap["Pretest"] || 0;
|
|
routes.ROUTE_2 = levelMap["Level 1"] || 0;
|
|
routes.ROUTE_3 = levelMap["Level 3"] || 0;
|
|
routes.ROUTE_4 = levelMap["Level 4"] || 0;
|
|
routes.ROUTE_5 = levelMap["Level 5"] || 0;
|
|
routes.ROUTE_6 = levelMap["Level 6"] || 0;
|
|
break;
|
|
case "Level 3":
|
|
routes.ROUTE_1 = levelMap["Pretest"] || 0;
|
|
routes.ROUTE_2 = levelMap["Level 1"] || 0;
|
|
routes.ROUTE_3 = levelMap["Level 2"] || 0;
|
|
routes.ROUTE_4 = levelMap["Level 4"] || 0;
|
|
routes.ROUTE_5 = levelMap["Level 5"] || 0;
|
|
routes.ROUTE_6 = levelMap["Level 6"] || 0;
|
|
break;
|
|
case "Level 4":
|
|
routes.ROUTE_1 = levelMap["Pretest"] || 0;
|
|
routes.ROUTE_2 = levelMap["Level 1"] || 0;
|
|
routes.ROUTE_3 = levelMap["Level 2"] || 0;
|
|
routes.ROUTE_4 = levelMap["Level 3"] || 0;
|
|
routes.ROUTE_5 = levelMap["Level 5"] || 0;
|
|
routes.ROUTE_6 = levelMap["Level 6"] || 0;
|
|
break;
|
|
case "Level 5":
|
|
routes.ROUTE_1 = levelMap["Pretest"] || 0;
|
|
routes.ROUTE_2 = levelMap["Level 1"] || 0;
|
|
routes.ROUTE_3 = levelMap["Level 2"] || 0;
|
|
routes.ROUTE_4 = levelMap["Level 3"] || 0;
|
|
routes.ROUTE_5 = levelMap["Level 4"] || 0;
|
|
routes.ROUTE_6 = levelMap["Level 6"] || 0;
|
|
break;
|
|
case "Level 6":
|
|
routes.ROUTE_1 = levelMap["Pretest"] || 0;
|
|
routes.ROUTE_2 = levelMap["Level 1"] || 0;
|
|
routes.ROUTE_3 = levelMap["Level 2"] || 0;
|
|
routes.ROUTE_4 = levelMap["Level 3"] || 0;
|
|
routes.ROUTE_5 = levelMap["Level 4"] || 0;
|
|
routes.ROUTE_6 = levelMap["Level 5"] || 0;
|
|
break;
|
|
}
|
|
|
|
req.body.ROUTE_1 = routes.ROUTE_1;
|
|
req.body.ROUTE_2 = routes.ROUTE_2;
|
|
req.body.ROUTE_3 = routes.ROUTE_3;
|
|
req.body.ROUTE_4 = routes.ROUTE_4;
|
|
req.body.ROUTE_5 = routes.ROUTE_5;
|
|
req.body.ROUTE_6 = routes.ROUTE_6;
|
|
|
|
next();
|
|
} catch (error) {
|
|
console.log(error);
|
|
return response(500, null, "Internal Server Error", res);
|
|
}
|
|
};
|
|
|
|
export const updateOtherLevelsRoutes = async (req, res, next) => {
|
|
const { NAME_LEVEL, ID_TOPIC, newLevelId } = req.body;
|
|
|
|
try {
|
|
const levelTitles = [
|
|
"Pretest",
|
|
"Level 1",
|
|
"Level 2",
|
|
"Level 3",
|
|
"Level 4",
|
|
"Level 5",
|
|
"Level 6",
|
|
];
|
|
const currentLevelIndex = levelTitles.indexOf(NAME_LEVEL);
|
|
|
|
if (currentLevelIndex !== -1) {
|
|
const levels = await models.Level.findAll({
|
|
where: {
|
|
ID_TOPIC,
|
|
NAME_LEVEL: {
|
|
[models.Sequelize.Op.in]: levelTitles,
|
|
},
|
|
IS_DELETED: 0,
|
|
},
|
|
});
|
|
|
|
levels.sort(
|
|
(a, b) =>
|
|
levelTitles.indexOf(a.NAME_LEVEL) - levelTitles.indexOf(b.NAME_LEVEL)
|
|
);
|
|
|
|
const levelMap = {};
|
|
levels.forEach((level) => {
|
|
levelMap[level.NAME_LEVEL] = level.ID_LEVEL;
|
|
});
|
|
|
|
if (newLevelId) {
|
|
levelMap[NAME_LEVEL] = newLevelId;
|
|
}
|
|
|
|
for (let i = 0; i < levelTitles.length; i++) {
|
|
if (i === currentLevelIndex) continue;
|
|
|
|
const levelTitle = levelTitles[i];
|
|
const updateData = {};
|
|
|
|
if (i === 0) {
|
|
updateData.ROUTE_1 = levelMap["Level 1"] || 0;
|
|
updateData.ROUTE_2 = levelMap["Level 2"] || 0;
|
|
updateData.ROUTE_3 = levelMap["Level 3"] || 0;
|
|
updateData.ROUTE_4 = levelMap["Level 4"] || 0;
|
|
updateData.ROUTE_5 = levelMap["Level 5"] || 0;
|
|
updateData.ROUTE_6 = levelMap["Level 6"] || 0;
|
|
} else if (i === 1) {
|
|
updateData.ROUTE_1 = levelMap["Pretest"] || 0;
|
|
updateData.ROUTE_2 = levelMap["Level 2"] || 0;
|
|
updateData.ROUTE_3 = levelMap["Level 3"] || 0;
|
|
updateData.ROUTE_4 = levelMap["Level 4"] || 0;
|
|
updateData.ROUTE_5 = levelMap["Level 5"] || 0;
|
|
updateData.ROUTE_6 = levelMap["Level 6"] || 0;
|
|
} else if (i === 2) {
|
|
updateData.ROUTE_1 = levelMap["Pretest"] || 0;
|
|
updateData.ROUTE_2 = levelMap["Level 1"] || 0;
|
|
updateData.ROUTE_3 = levelMap["Level 3"] || 0;
|
|
updateData.ROUTE_4 = levelMap["Level 4"] || 0;
|
|
updateData.ROUTE_5 = levelMap["Level 5"] || 0;
|
|
updateData.ROUTE_6 = levelMap["Level 6"] || 0;
|
|
} else if (i === 3) {
|
|
updateData.ROUTE_1 = levelMap["Pretest"] || 0;
|
|
updateData.ROUTE_2 = levelMap["Level 1"] || 0;
|
|
updateData.ROUTE_3 = levelMap["Level 2"] || 0;
|
|
updateData.ROUTE_4 = levelMap["Level 4"] || 0;
|
|
updateData.ROUTE_5 = levelMap["Level 5"] || 0;
|
|
updateData.ROUTE_6 = levelMap["Level 6"] || 0;
|
|
} else if (i === 4) {
|
|
updateData.ROUTE_1 = levelMap["Pretest"] || 0;
|
|
updateData.ROUTE_2 = levelMap["Level 1"] || 0;
|
|
updateData.ROUTE_3 = levelMap["Level 2"] || 0;
|
|
updateData.ROUTE_4 = levelMap["Level 3"] || 0;
|
|
updateData.ROUTE_5 = levelMap["Level 5"] || 0;
|
|
updateData.ROUTE_6 = levelMap["Level 6"] || 0;
|
|
} else if (i === 5) {
|
|
updateData.ROUTE_1 = levelMap["Pretest"] || 0;
|
|
updateData.ROUTE_2 = levelMap["Level 1"] || 0;
|
|
updateData.ROUTE_3 = levelMap["Level 2"] || 0;
|
|
updateData.ROUTE_4 = levelMap["Level 3"] || 0;
|
|
updateData.ROUTE_5 = levelMap["Level 4"] || 0;
|
|
updateData.ROUTE_6 = levelMap["Level 6"] || 0;
|
|
} else if (i === 6) {
|
|
updateData.ROUTE_1 = levelMap["Pretest"] || 0;
|
|
updateData.ROUTE_2 = levelMap["Level 1"] || 0;
|
|
updateData.ROUTE_3 = levelMap["Level 2"] || 0;
|
|
updateData.ROUTE_4 = levelMap["Level 3"] || 0;
|
|
updateData.ROUTE_5 = levelMap["Level 4"] || 0;
|
|
updateData.ROUTE_6 = levelMap["Level 5"] || 0;
|
|
}
|
|
|
|
await models.Level.update(updateData, {
|
|
where: {
|
|
ID_TOPIC,
|
|
NAME_LEVEL: levelTitle,
|
|
},
|
|
});
|
|
}
|
|
}
|
|
|
|
next();
|
|
} catch (error) {
|
|
console.log(error);
|
|
return response(500, null, "Internal Server Error", res);
|
|
}
|
|
};
|
|
|
|
export const updateOtherLevelsRoutesOnDelete = async (req, res, next) => {
|
|
const { newLevelId } = req.body;
|
|
|
|
try {
|
|
if (!newLevelId) {
|
|
return response(400, null, "No level provided for deletion!", res);
|
|
}
|
|
|
|
const levelsToUpdate = await models.Level.findAll({
|
|
where: {
|
|
IS_DELETED: 0,
|
|
[models.Sequelize.Op.or]: [
|
|
{ ROUTE_1: newLevelId },
|
|
{ ROUTE_2: newLevelId },
|
|
{ ROUTE_3: newLevelId },
|
|
{ ROUTE_4: newLevelId },
|
|
{ ROUTE_5: newLevelId },
|
|
{ ROUTE_6: newLevelId },
|
|
],
|
|
},
|
|
});
|
|
|
|
for (const level of levelsToUpdate) {
|
|
const updateData = {};
|
|
if (level.ROUTE_1 === newLevelId) updateData.ROUTE_1 = 0;
|
|
if (level.ROUTE_2 === newLevelId) updateData.ROUTE_2 = 0;
|
|
if (level.ROUTE_3 === newLevelId) updateData.ROUTE_3 = 0;
|
|
if (level.ROUTE_4 === newLevelId) updateData.ROUTE_4 = 0;
|
|
if (level.ROUTE_5 === newLevelId) updateData.ROUTE_5 = 0;
|
|
if (level.ROUTE_6 === newLevelId) updateData.ROUTE_6 = 0;
|
|
|
|
await level.update(updateData);
|
|
}
|
|
|
|
next();
|
|
} catch (error) {
|
|
console.log(error);
|
|
return response(500, null, "Internal Server Error", res);
|
|
}
|
|
};
|