@@ -7,6 +7,7 @@ use crate::{
77 LearningSession , OptionalSessionType , ProgressReport , ReportPeriod ,
88 } ,
99} ;
10+ use shared:: timestamp_utils:: { utc_day_start, SECS_PER_DAY } ;
1011use soroban_sdk:: { Address , Env , Symbol , Vec } ;
1112
1213/// Report generation and time-based analytics
@@ -69,7 +70,7 @@ impl ReportGenerator {
6970 }
7071
7172 // Calculate average daily time
72- let report_days = ( ( end_date - start_date) / 86400 ) + 1 ; // +1 to include both start and end days
73+ let report_days = ( ( end_date - start_date) / SECS_PER_DAY ) + 1 ; // +1 to include both start and end days
7374 let average_daily_time = total_time. checked_div ( report_days) . unwrap_or ( 0 ) ;
7475
7576 // Calculate consistency score
@@ -124,8 +125,8 @@ impl ReportGenerator {
124125 course_id : & Symbol ,
125126 date : u64 ,
126127 ) -> Result < AggregatedMetrics , AnalyticsError > {
127- let day_start = ( date / 86400 ) * 86400 ; // Start of day
128- let day_end = day_start + 86400 ; // End of day
128+ let day_start = utc_day_start ( date) ;
129+ let day_end = day_start + SECS_PER_DAY ;
129130
130131 let students = AnalyticsStorage :: get_course_students ( env, course_id) ;
131132 let mut active_students = 0u32 ;
@@ -345,13 +346,13 @@ impl ReportGenerator {
345346 return 0 ;
346347 }
347348
348- let total_days = ( ( end_date - start_date) / 86400 ) + 1 ;
349+ let total_days = ( ( end_date - start_date) / SECS_PER_DAY ) + 1 ;
349350 let mut active_days: Vec < u64 > = Vec :: new ( env) ;
350351
351- // Count unique active days
352+ // Count unique active UTC days
352353 for i in 0 ..sessions. len ( ) {
353354 let session = sessions. get ( i) . unwrap ( ) ;
354- let day = session. start_time / 86400 ;
355+ let day = session. start_time / SECS_PER_DAY ;
355356
356357 let mut day_exists = false ;
357358 for j in 0 ..active_days. len ( ) {
0 commit comments