From 526426d9f98b86cdf24ff18c91e6d3110c5063e7 Mon Sep 17 00:00:00 2001 From: Yared Yemane Date: Sat, 25 Apr 2026 02:41:34 -0700 Subject: [PATCH] course practice count fix --- db/query/lms_courses.sql | 6 +++++- gen/db/lms_courses.sql.go | 6 +++++- internal/domain/course.go | 3 ++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/db/query/lms_courses.sql b/db/query/lms_courses.sql index 3dae7ad..e3cccbf 100644 --- a/db/query/lms_courses.sql +++ b/db/query/lms_courses.sql @@ -55,13 +55,17 @@ SELECT INNER JOIN modules m ON l.module_id = m.id WHERE m.course_id = c.id) AS lesson_count, + -- Practices whose parent is the course only (lms_practices.course_id). Excludes + -- practices linked via module_id or lesson_id, even for modules/lessons in this course. ( SELECT COUNT(*)::bigint FROM lms_practices p WHERE - p.course_id = c.id) AS practice_count + p.course_id = c.id + AND p.module_id IS NULL + AND p.lesson_id IS NULL) AS practice_count FROM courses c WHERE diff --git a/gen/db/lms_courses.sql.go b/gen/db/lms_courses.sql.go index f53ec28..6f8b400 100644 --- a/gen/db/lms_courses.sql.go +++ b/gen/db/lms_courses.sql.go @@ -145,13 +145,17 @@ SELECT INNER JOIN modules m ON l.module_id = m.id WHERE m.course_id = c.id) AS lesson_count, + -- Practices whose parent is the course only (lms_practices.course_id). Excludes + -- practices linked via module_id or lesson_id, even for modules/lessons in this course. ( SELECT COUNT(*)::bigint FROM lms_practices p WHERE - p.course_id = c.id) AS practice_count + p.course_id = c.id + AND p.module_id IS NULL + AND p.lesson_id IS NULL) AS practice_count FROM courses c WHERE diff --git a/internal/domain/course.go b/internal/domain/course.go index cd3d8bc..0a00dcd 100644 --- a/internal/domain/course.go +++ b/internal/domain/course.go @@ -23,7 +23,8 @@ type Course struct { SortOrder int `json:"sort_order"` CreatedAt time.Time `json:"created_at"` UpdatedAt *time.Time `json:"updated_at,omitempty"` - // Populated on list-by-program; practices with course_id set (direct course practice only). + // Populated on list-by-program. Practice count: lms_practices rows with course_id = course only + // (not practices attached to a module or lesson under this course). ModuleCount int `json:"module_count"` LessonCount int `json:"lesson_count"` PracticeCount int `json:"practice_count"`