add: ver()

Signed-off-by: Kenneth Obsequio <k80308392@gmail.com>
This commit is contained in:
2026-07-08 11:31:40 +08:00
parent 0e4cd86119
commit bb7e8fde08
29 changed files with 2234 additions and 780 deletions
@@ -35,8 +35,10 @@ const CourseReadingProgress = require('../../models/courses/course_readi
const Certificate = require('../../models/courses/certificate.mdl');
const {
Course, Unit, Lesson,
CourseUnit, UnitLesson,
UnitQuiz, CourseAssessment, QuizAttempt,
} = require('../../models/courses/courses.associations');
const { countCourseLessons, getCourseUnitIds, flattenUnits } = require('../../utils/courses/hierarchy.util');
const { Task, TaskRequirement, TaskListGroup } = require('../../models/task/task.mdl');
const { TaskProgress } = require('../../models/task/task_progress.mdl');
@@ -192,15 +194,7 @@ exports.getMyInProgressCourses = async (req, res) => {
const courseId = row.course_id;
const [lessons_total, lessons_completed] = await Promise.all([
Lesson.count({
include: [{
model: Unit,
as: 'unit',
where: { course_id: courseId, ...notDeleted },
required: true,
}],
where: notDeleted,
}),
countCourseLessons(courseId),
CourseReadingProgress.count({
where: { user_id: userId, course_id: courseId, type: 'lesson', status: 'completed' },
}),
@@ -215,17 +209,18 @@ exports.getMyInProgressCourses = async (req, res) => {
let assessment_configured = true;
if (readingDone) {
const unitQuizzes = await UnitQuiz.findAll({
const courseUnitIds = await getCourseUnitIds(courseId);
const unitQuizzes = courseUnitIds.length ? await UnitQuiz.findAll({
attributes: ['quiz_id', 'title', 'is_required', 'passing_score'],
include: [{
model: Unit,
as: 'unit',
attributes: ['unit_id', 'title'],
where: { course_id: courseId, ...notDeleted },
where: notDeleted,
required: true,
}],
where: notDeleted,
});
where: { unit_id: courseUnitIds, ...notDeleted },
}) : [];
for (const quiz of unitQuizzes) {
const [hasPassed, attemptCount] = await Promise.all([
@@ -302,15 +297,7 @@ exports.getCourseProgressSummary = async (req, res) => {
if (!course) return R.error(res, 'Course not found.', 404);
const [lessons_total, lessons_completed, courseRow] = await Promise.all([
Lesson.count({
include: [{
model: Unit,
as: 'unit',
where: { course_id: courseId, ...notDeleted },
required: true,
}],
where: notDeleted,
}),
countCourseLessons(courseId),
CourseReadingProgress.count({
where: { user_id: userId, course_id: courseId, type: 'lesson', status: 'completed' },
}),
@@ -385,12 +372,14 @@ exports.getCourseTaskContext = async (req, res) => {
where: notDeleted,
required: false,
attributes: ['unit_id', 'uuid'],
through: { attributes: [] },
include: [{
model: Lesson,
as: 'lessons',
where: notDeleted,
required: false,
attributes: ['lesson_id', 'uuid'],
through: { attributes: [] },
}],
}],
});
@@ -475,24 +464,26 @@ exports.upsertLessonProgress = async (req, res) => {
const userId = req.user.user_id;
const status = req.body.status === 'completed' ? 'completed' : 'in_progress';
const [course, unit, lesson] = await Promise.all([
const [course, unit, lesson, courseLink, lessonLink] = await Promise.all([
Course.findOne({
where: { course_id: courseId, ...notDeleted },
attributes: ['course_id', 'uuid'],
}),
Unit.findOne({
where: { unit_id: unitId, course_id: courseId, ...notDeleted },
where: { unit_id: unitId, ...notDeleted },
attributes: ['unit_id', 'uuid'],
}),
Lesson.findOne({
where: { lesson_id: lessonId, unit_id: unitId, ...notDeleted },
where: { lesson_id: lessonId, ...notDeleted },
attributes: ['lesson_id', 'uuid'],
}),
CourseUnit.findOne({ where: { course_id: courseId, unit_id: unitId } }),
UnitLesson.findOne({ where: { unit_id: unitId, lesson_id: lessonId } }),
]);
if (!course) return R.error(res, 'Course not found.', 404);
if (!unit) return R.error(res, 'Unit not found.', 404);
if (!lesson) return R.error(res, 'Lesson not found.', 404);
if (!course) return R.error(res, 'Course not found.', 404);
if (!unit || !courseLink) return R.error(res, 'Unit not found.', 404);
if (!lesson || !lessonLink) return R.error(res, 'Lesson not found.', 404);
// ── 1. Primary write: course_reading_progress ─────────────────────────
const result = await upsertLessonRead(userId, {