feat: pagination on learning history
This commit is contained in:
parent
12905cab0e
commit
6944aa1eef
|
|
@ -130,7 +130,7 @@ export const createSection = async (req, res) => {
|
||||||
if (existingSection) {
|
if (existingSection) {
|
||||||
clearFileBuffers({ THUMBNAIL });
|
clearFileBuffers({ THUMBNAIL });
|
||||||
await transaction.rollback();
|
await transaction.rollback();
|
||||||
return response(400, null, "Section name already exists", res);
|
return response(409, null, "Section name already exists", res);
|
||||||
}
|
}
|
||||||
|
|
||||||
const newSection = await models.Section.create(
|
const newSection = await models.Section.create(
|
||||||
|
|
|
||||||
|
|
@ -241,6 +241,8 @@ export const learningScoreByStdLearningId = async (req, res) => {
|
||||||
};
|
};
|
||||||
|
|
||||||
export const learningHistory = async (req, res) => {
|
export const learningHistory = async (req, res) => {
|
||||||
|
const { page = 1, limit = 10 } = req.query;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (!req.user) {
|
if (!req.user) {
|
||||||
return response(401, null, "User not authenticated", res);
|
return response(401, null, "User not authenticated", res);
|
||||||
|
|
@ -283,7 +285,7 @@ export const learningHistory = async (req, res) => {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
const result = await Promise.all(
|
const formattedLearnings = await Promise.all(
|
||||||
stdLearnings.map(async (learning) => {
|
stdLearnings.map(async (learning) => {
|
||||||
let nextLevelName = null;
|
let nextLevelName = null;
|
||||||
if (learning.NEXT_LEARNING) {
|
if (learning.NEXT_LEARNING) {
|
||||||
|
|
@ -304,11 +306,30 @@ export const learningHistory = async (req, res) => {
|
||||||
SECTION_NAME:
|
SECTION_NAME:
|
||||||
learning.level?.levelTopic?.topicSection?.NAME_SECTION ||
|
learning.level?.levelTopic?.topicSection?.NAME_SECTION ||
|
||||||
"No section",
|
"No section",
|
||||||
|
IS_PASS: learning.IS_PASS,
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
response(200, result, "Success", res);
|
const paginatedLearnings = formattedLearnings.slice(
|
||||||
|
(page - 1) * limit,
|
||||||
|
page * limit
|
||||||
|
);
|
||||||
|
|
||||||
|
const totalPages = Math.ceil(formattedLearnings.length / limit);
|
||||||
|
const currentPage = parseInt(page);
|
||||||
|
|
||||||
|
response(
|
||||||
|
200,
|
||||||
|
{
|
||||||
|
history: paginatedLearnings,
|
||||||
|
currentPage,
|
||||||
|
totalPages,
|
||||||
|
totalItems: formattedLearnings.length,
|
||||||
|
},
|
||||||
|
"Learning history retrieved successfully",
|
||||||
|
res
|
||||||
|
);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(error);
|
console.error(error);
|
||||||
response(500, null, "Internal Server Error", res);
|
response(500, null, "Internal Server Error", res);
|
||||||
|
|
@ -316,6 +337,8 @@ export const learningHistory = async (req, res) => {
|
||||||
};
|
};
|
||||||
|
|
||||||
export const learningHistoryBySectionId = async (req, res) => {
|
export const learningHistoryBySectionId = async (req, res) => {
|
||||||
|
const { page = 1, limit = 10 } = req.query;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (!req.user) {
|
if (!req.user) {
|
||||||
return response(401, null, "User not authenticated", res);
|
return response(401, null, "User not authenticated", res);
|
||||||
|
|
@ -360,7 +383,7 @@ export const learningHistoryBySectionId = async (req, res) => {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
const result = await Promise.all(
|
const formattedLearnings = await Promise.all(
|
||||||
stdLearnings.map(async (learning) => {
|
stdLearnings.map(async (learning) => {
|
||||||
let nextLevelName = null;
|
let nextLevelName = null;
|
||||||
if (learning.NEXT_LEARNING) {
|
if (learning.NEXT_LEARNING) {
|
||||||
|
|
@ -381,11 +404,30 @@ export const learningHistoryBySectionId = async (req, res) => {
|
||||||
SECTION_NAME:
|
SECTION_NAME:
|
||||||
learning.level?.levelTopic?.topicSection?.NAME_SECTION ||
|
learning.level?.levelTopic?.topicSection?.NAME_SECTION ||
|
||||||
"No section",
|
"No section",
|
||||||
|
IS_PASS: learning.IS_PASS,
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
response(200, result, "Success", res);
|
const paginatedLearnings = formattedLearnings.slice(
|
||||||
|
(page - 1) * limit,
|
||||||
|
page * limit
|
||||||
|
);
|
||||||
|
|
||||||
|
const totalPages = Math.ceil(formattedLearnings.length / limit);
|
||||||
|
const currentPage = parseInt(page);
|
||||||
|
|
||||||
|
response(
|
||||||
|
200,
|
||||||
|
{
|
||||||
|
history: paginatedLearnings,
|
||||||
|
currentPage,
|
||||||
|
totalPages,
|
||||||
|
totalItems: formattedLearnings.length,
|
||||||
|
},
|
||||||
|
"Learning history retrieved successfully",
|
||||||
|
res
|
||||||
|
);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log(error);
|
console.log(error);
|
||||||
response(500, null, "Internal Server Error", res);
|
response(500, null, "Internal Server Error", res);
|
||||||
|
|
@ -393,6 +435,8 @@ export const learningHistoryBySectionId = async (req, res) => {
|
||||||
};
|
};
|
||||||
|
|
||||||
export const learningHistoryByTopicId = async (req, res) => {
|
export const learningHistoryByTopicId = async (req, res) => {
|
||||||
|
const { page = 1, limit = 10 } = req.query;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (!req.user) {
|
if (!req.user) {
|
||||||
return response(401, null, "User not authenticated", res);
|
return response(401, null, "User not authenticated", res);
|
||||||
|
|
@ -441,7 +485,7 @@ export const learningHistoryByTopicId = async (req, res) => {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
const result = await Promise.all(
|
const formattedLearnings = await Promise.all(
|
||||||
stdLearnings.map(async (learning) => {
|
stdLearnings.map(async (learning) => {
|
||||||
let nextLevelName = null;
|
let nextLevelName = null;
|
||||||
if (learning.NEXT_LEARNING) {
|
if (learning.NEXT_LEARNING) {
|
||||||
|
|
@ -462,11 +506,30 @@ export const learningHistoryByTopicId = async (req, res) => {
|
||||||
SECTION_NAME:
|
SECTION_NAME:
|
||||||
learning.level?.levelTopic?.topicSection?.NAME_SECTION ||
|
learning.level?.levelTopic?.topicSection?.NAME_SECTION ||
|
||||||
"No section",
|
"No section",
|
||||||
|
IS_PASS: learning.IS_PASS,
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
response(200, result, "Success", res);
|
const paginatedLearnings = formattedLearnings.slice(
|
||||||
|
(page - 1) * limit,
|
||||||
|
page * limit
|
||||||
|
);
|
||||||
|
|
||||||
|
const totalPages = Math.ceil(formattedLearnings.length / limit);
|
||||||
|
const currentPage = parseInt(page);
|
||||||
|
|
||||||
|
response(
|
||||||
|
200,
|
||||||
|
{
|
||||||
|
history: paginatedLearnings,
|
||||||
|
currentPage,
|
||||||
|
totalPages,
|
||||||
|
totalItems: formattedLearnings.length,
|
||||||
|
},
|
||||||
|
"Learning history retrieved successfully",
|
||||||
|
res
|
||||||
|
);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(error);
|
console.error(error);
|
||||||
response(500, null, "Internal Server Error", res);
|
response(500, null, "Internal Server Error", res);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user