Yimaru-BackEnd/internal/repository/lms_user_progress_snapshot.go
Yared Yemane afdd07d65d Update learner progress to use practice completions only.
Remove lesson completion from learner progress percentages, access completion snapshots, and LMS rollups while keeping generated SQLC and Swagger artifacts in sync.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-26 03:27:54 -07:00

53 lines
1.6 KiB
Go

package repository
import (
"context"
dbgen "Yimaru-Backend/gen/db"
"Yimaru-Backend/internal/domain"
"github.com/jackc/pgx/v5/pgtype"
)
// GetLMSUserProgressSnapshot returns practice-based completed lesson, module, course,
// and program IDs for a user.
func (s *Store) GetLMSUserProgressSnapshot(ctx context.Context, userID int64) (domain.LMSUserProgress, error) {
lessons, err := s.queries.ListLMSCompletedLessonIDsByUser(ctx, userID)
if err != nil {
return domain.LMSUserProgress{}, err
}
mods, err := s.queries.ListLMSCompletedModuleIDsByUser(ctx, userID)
if err != nil {
return domain.LMSUserProgress{}, err
}
courses, err := s.queries.ListLMSCompletedCourseIDsByUser(ctx, userID)
if err != nil {
return domain.LMSUserProgress{}, err
}
programs, err := s.queries.ListLMSCompletedProgramIDsByUser(ctx, userID)
if err != nil {
return domain.LMSUserProgress{}, err
}
return domain.LMSUserProgress{
LessonIDs: pgInt8IDsToInt64(lessons),
ModuleIDs: pgInt8IDsToInt64(mods),
CourseIDs: pgInt8IDsToInt64(courses),
ProgramIDs: programs,
}, nil
}
func pgInt8IDsToInt64(items []pgtype.Int8) []int64 {
out := make([]int64, 0, len(items))
for _, item := range items {
if !item.Valid {
continue
}
out = append(out, item.Int64)
}
return out
}
// ListUserLMSFlatLearningActivity returns flattened LMS activity rows for admin reporting (lesson + practice completions).
func (s *Store) ListUserLMSFlatLearningActivity(ctx context.Context, userID int64) ([]dbgen.ListUserLMSFlatLearningActivityByUserRow, error) {
return s.queries.ListUserLMSFlatLearningActivityByUser(ctx, userID)
}