package domain // LMSEntityAccess describes learner gating for a program, course, module, or lesson. // Included for STUDENT and OPEN_LEARNER; omitted (nil) for staff roles in API responses. // OPEN_LEARNER always has is_accessible and is_completed true; STUDENT reflects real progress and gating. // Progress fields count completed published practices vs total published practices in the // entity's scope. progress_percent keeps the legacy whole-number value; use // progress_percent_precise for decimal precision in learner UIs. type LMSEntityAccess struct { IsAccessible bool `json:"is_accessible"` IsCompleted bool `json:"is_completed"` Reason string `json:"reason,omitempty"` CompletedCount int `json:"completed_count"` TotalCount int `json:"total_count"` ProgressPercent int `json:"progress_percent"` ProgressPercentPrecise float64 `json:"progress_percent_precise"` } // LMSUserProgress lists entity IDs the authenticated user has fully completed based on // published practice completion in each LMS scope. type LMSUserProgress struct { LessonIDs []int64 `json:"lesson_ids"` ModuleIDs []int64 `json:"module_ids"` CourseIDs []int64 `json:"course_ids"` ProgramIDs []int64 `json:"program_ids"` }