@@ -10,6 +10,8 @@ type ProgressInfo = {
1010 nextLessonId ?: number | null ;
1111 nextModuleId ?: number | null ;
1212 subjectId : number ;
13+ firstModuleInSubject : number | null ;
14+ firstLessonInSubject : number | null ;
1315} ;
1416
1517// Create a type for the full progress data object
@@ -22,10 +24,15 @@ export const load: PageServerLoad = async ({ locals }) => {
2224
2325 // Initialize with an index signature to allow dynamic keys
2426 const progressData : ProgressData = {
25- html : { progress : 0 , subjectId : 0 } ,
26- css : { progress : 0 , subjectId : 0 } ,
27- javascript : { progress : 0 , subjectId : 0 } ,
28- backend : { progress : 0 , subjectId : 0 }
27+ html : { progress : 0 , subjectId : 0 , firstLessonInSubject : null , firstModuleInSubject : null } ,
28+ css : { progress : 0 , subjectId : 0 , firstLessonInSubject : null , firstModuleInSubject : null } ,
29+ javascript : {
30+ progress : 0 ,
31+ subjectId : 0 ,
32+ firstLessonInSubject : null ,
33+ firstModuleInSubject : null
34+ } ,
35+ backend : { progress : 0 , subjectId : 0 , firstLessonInSubject : null , firstModuleInSubject : null }
2936 } ;
3037
3138 if ( session ?. user ?. id ) {
@@ -45,7 +52,9 @@ export const load: PageServerLoad = async ({ locals }) => {
4552 if ( subjectModules . length === 0 ) {
4653 progressData [ subjectName ] = {
4754 progress : 0 ,
48- subjectId : subject . id
55+ subjectId : subject . id ,
56+ firstLessonInSubject : 0 ,
57+ firstModuleInSubject : 0
4958 } ;
5059 continue ;
5160 }
@@ -64,7 +73,9 @@ export const load: PageServerLoad = async ({ locals }) => {
6473 if ( totalLessons === 0 ) {
6574 progressData [ subjectName ] = {
6675 progress : 0 ,
67- subjectId : subject . id
76+ subjectId : subject . id ,
77+ firstLessonInSubject : 0 ,
78+ firstModuleInSubject : 0
6879 } ;
6980 continue ;
7081 }
@@ -89,22 +100,32 @@ export const load: PageServerLoad = async ({ locals }) => {
89100 let nextLessonId = null ;
90101 let nextModuleId = null ;
91102
103+ // Get first module and lesson for this subject (for restart case)
104+ const firstModule = subjectModules . sort (
105+ ( a , b ) => ( a . orderInSubject || 0 ) - ( b . orderInSubject || 0 )
106+ ) [ 0 ] ;
107+
108+ let firstLessonId : number | null = null ;
109+ let firstModuleId : number | null = null ;
110+
111+ if ( firstModule ) {
112+ firstModuleId = firstModule . id ;
113+
114+ const firstLesson = subjectLessons
115+ . filter ( ( l ) => l . moduleId === firstModule . id )
116+ . sort ( ( a , b ) => ( a . orderInModule || 0 ) - ( b . orderInModule || 0 ) ) [ 0 ] ;
117+
118+ if ( firstLesson ) {
119+ firstLessonId = firstLesson . id ;
120+ }
121+ }
122+
92123 // First, check if there are any completed lessons
93124 if ( completedLessonIds . length === 0 ) {
94125 // No lessons completed yet? go to first lesson in the first module
95- const firstModule = subjectModules . sort (
96- ( a , b ) => ( a . orderInSubject || 0 ) - ( b . orderInSubject || 0 )
97- ) [ 0 ] ;
98-
99- if ( firstModule ) {
100- const firstLesson = subjectLessons
101- . filter ( ( l ) => l . moduleId === firstModule . id )
102- . sort ( ( a , b ) => ( a . orderInModule || 0 ) - ( b . orderInModule || 0 ) ) [ 0 ] ;
103-
104- if ( firstLesson ) {
105- nextLessonId = firstLesson . id ;
106- nextModuleId = firstModule . id ;
107- }
126+ if ( firstModuleId && firstLessonId ) {
127+ nextLessonId = firstLessonId ;
128+ nextModuleId = firstModuleId ;
108129 }
109130 } else {
110131 // Has completed lessons? find the next uncompleted one
@@ -126,12 +147,14 @@ export const load: PageServerLoad = async ({ locals }) => {
126147 if ( nextLessonId ) break ;
127148 }
128149 }
129-
150+
130151 progressData [ subjectName ] = {
131152 progress,
132153 nextLessonId,
133154 nextModuleId,
134- subjectId : subject . id
155+ subjectId : subject . id ,
156+ firstModuleInSubject : firstModuleId ,
157+ firstLessonInSubject : firstLessonId
135158 } ;
136159 }
137160 }
0 commit comments