progress tracking fix

This commit is contained in:
Yared Yemane 2026-05-26 03:50:46 -07:00
parent afdd07d65d
commit 56cc009579
2 changed files with 49 additions and 1 deletions

View File

@ -31,7 +31,7 @@ func (s *Store) GetLMSUserProgressSnapshot(ctx context.Context, userID int64) (d
LessonIDs: pgInt8IDsToInt64(lessons), LessonIDs: pgInt8IDsToInt64(lessons),
ModuleIDs: pgInt8IDsToInt64(mods), ModuleIDs: pgInt8IDsToInt64(mods),
CourseIDs: pgInt8IDsToInt64(courses), CourseIDs: pgInt8IDsToInt64(courses),
ProgramIDs: programs, ProgramIDs: int64IDsOrEmpty(programs),
}, nil }, nil
} }
@ -46,6 +46,13 @@ func pgInt8IDsToInt64(items []pgtype.Int8) []int64 {
return out return out
} }
func int64IDsOrEmpty(items []int64) []int64 {
if items == nil {
return []int64{}
}
return items
}
// ListUserLMSFlatLearningActivity returns flattened LMS activity rows for admin reporting (lesson + practice completions). // ListUserLMSFlatLearningActivity returns flattened LMS activity rows for admin reporting (lesson + practice completions).
func (s *Store) ListUserLMSFlatLearningActivity(ctx context.Context, userID int64) ([]dbgen.ListUserLMSFlatLearningActivityByUserRow, error) { func (s *Store) ListUserLMSFlatLearningActivity(ctx context.Context, userID int64) ([]dbgen.ListUserLMSFlatLearningActivityByUserRow, error) {
return s.queries.ListUserLMSFlatLearningActivityByUser(ctx, userID) return s.queries.ListUserLMSFlatLearningActivityByUser(ctx, userID)

View File

@ -0,0 +1,41 @@
package repository
import (
"testing"
"github.com/jackc/pgx/v5/pgtype"
)
func TestPgInt8IDsToInt64ReturnsEmptySlice(t *testing.T) {
got := pgInt8IDsToInt64(nil)
if got == nil {
t.Fatal("expected empty slice, got nil")
}
if len(got) != 0 {
t.Fatalf("expected empty slice, got len=%d", len(got))
}
}
func TestPgInt8IDsToInt64FiltersInvalidIDs(t *testing.T) {
got := pgInt8IDsToInt64([]pgtype.Int8{
{Int64: 10, Valid: true},
{Valid: false},
{Int64: 20, Valid: true},
})
if len(got) != 2 {
t.Fatalf("expected 2 ids, got %d", len(got))
}
if got[0] != 10 || got[1] != 20 {
t.Fatalf("unexpected ids: %#v", got)
}
}
func TestInt64IDsOrEmptyReturnsEmptySlice(t *testing.T) {
got := int64IDsOrEmpty(nil)
if got == nil {
t.Fatal("expected empty slice, got nil")
}
if len(got) != 0 {
t.Fatalf("expected empty slice, got len=%d", len(got))
}
}