mirror of
https://github.com/rgrgogu/new_starr.git
synced 2026-09-27 00:12:54 +08:00
@@ -31,7 +31,6 @@ const { mdl_UserGroupMembers } = require('../../models/users/use
|
||||
const { Course } = require('../../models/courses/courses.mdl');
|
||||
const CourseAssessment = require('../../models/courses/course_assessment.mdl');
|
||||
const QuizAttempt = require('../../models/courses/quiz_attempt.mdl');
|
||||
const UnitQuiz = require('../../models/courses/unit_quiz.mdl');
|
||||
const logActivity = require('../../utils/logActivity.util');
|
||||
const R = require('../../utils/response.util');
|
||||
const { hydrateReadTaskProgress } = require('../../services/task_reading_progress_sync.service');
|
||||
@@ -141,35 +140,6 @@ exports.getTaskProgress = async (req, res) => {
|
||||
|
||||
await hydrateReadTaskProgress(req.user.user_id, readRequirements);
|
||||
|
||||
// pass_quiz completion is computed live from QuizAttempt (same source
|
||||
// has_passed already uses for unit quizzes) rather than a synced
|
||||
// TaskProgress row — reference_id on the requirement is the quiz's
|
||||
// uuid, so resolve to quiz_id first.
|
||||
const quizRequirements = await TaskRequirement.findAll({
|
||||
where: { task_id: taskId, type: 'pass_quiz' },
|
||||
attributes: ['requirement_id', 'reference_id'],
|
||||
});
|
||||
const quizPassedRows = [];
|
||||
if (quizRequirements.length) {
|
||||
const quizUuids = [...new Set(quizRequirements.map((r) => r.reference_id).filter(Boolean))];
|
||||
const quizzes = await UnitQuiz.findAll({ where: { uuid: quizUuids }, attributes: ['quiz_id', 'uuid'] });
|
||||
const quizIdByUuid = new Map(quizzes.map((q) => [q.uuid, q.quiz_id]));
|
||||
const quizIds = quizzes.map((q) => q.quiz_id);
|
||||
const passedAttempts = quizIds.length
|
||||
? await QuizAttempt.findAll({ where: { quiz_id: { [Op.in]: quizIds }, user_id: req.user.user_id, passed: true }, attributes: ['quiz_id'] })
|
||||
: [];
|
||||
const passedQuizIds = new Set(passedAttempts.map((a) => String(a.quiz_id)));
|
||||
for (const r of quizRequirements) {
|
||||
const quizId = quizIdByUuid.get(r.reference_id);
|
||||
quizPassedRows.push({
|
||||
requirement_id: r.requirement_id,
|
||||
reference_id: r.reference_id,
|
||||
completed: quizId ? passedQuizIds.has(String(quizId)) : false,
|
||||
completed_at: null,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
const [linkVisits, progress] = await Promise.all([
|
||||
TaskLinkVisit.findAll({
|
||||
where: { task_id: taskId, user_id: req.user.user_id },
|
||||
@@ -183,7 +153,7 @@ exports.getTaskProgress = async (req, res) => {
|
||||
|
||||
return R.success(res, 'Task progress retrieved.', {
|
||||
link_visits: linkVisits,
|
||||
progress: [...progress, ...quizPassedRows],
|
||||
progress,
|
||||
});
|
||||
} catch (err) {
|
||||
console.error('[CLIENT][GET TASK PROGRESS]', err);
|
||||
|
||||
Reference in New Issue
Block a user