@@ -32,12 +32,14 @@ def working_time_query(tag = nil)
3232 bar.exercise_id,
3333 max(score) as maximum_score,
3434 count(bar.id) as runs,
35- sum(working_time_new) AS working_time
35+ sum(working_time_new) AS working_time,
36+ max_updated_at as updated_at
3637 FROM
3738 (SELECT contributor_id,
3839 exercise_id,
3940 score,
4041 id,
42+ max_updated_at,
4143 CASE
4244 WHEN #{ StatisticsHelper . working_time_larger_delta } THEN '0'
4345 ELSE working_time
@@ -46,7 +48,9 @@ def working_time_query(tag = nil)
4648 (SELECT contributor_id,
4749 exercise_id,
4850 max(score) AS score,
51+ max(filtered_submissions.updated_at) FILTER (WHERE cause IN ('submit', 'assess', 'remoteSubmit', 'remoteAssess')) AS max_updated_at,
4952 filtered_submissions.id,
53+ filtered_submissions.updated_at,
5054 (filtered_submissions.updated_at - lag(filtered_submissions.updated_at) over (PARTITION BY contributor_id, exercise_id
5155 ORDER BY filtered_submissions.updated_at)) AS working_time
5256 FROM filtered_submissions
@@ -61,7 +65,8 @@ def working_time_query(tag = nil)
6165 ) AS bar
6266 #{ tag . nil? ? '' : " JOIN exercise_tags et ON et.exercise_id = bar.exercise_id AND #{ ExternalUser . sanitize_sql ( [ 'et.tag_id = ?' , tag ] ) } " }
6367 GROUP BY contributor_id,
64- bar.exercise_id;
68+ bar.exercise_id,
69+ max_updated_at;
6570 "
6671 end
6772
@@ -75,12 +80,13 @@ def statistics
7580
7681 statistics = { }
7782
78- working_time_statistics = ApplicationRecord . connection . exec_query ( working_time_query ( tag &.id ) )
79- attempted_exercises = Exercise . where ( id : working_time_statistics . pluck ( 'exercise_id' ) )
83+ # We fake the statistics hash to be "submissions"
84+ # Available are: contributor_id, exercise_id, maximum_score, runs, working_time, updated_at
85+ working_time_statistics = Submission . find_by_sql ( working_time_query ( tag &.id ) )
86+ ActiveRecord ::Associations ::Preloader . new ( records : working_time_statistics , associations : [ :exercise ] ) . call
8087 working_time_statistics . each do |tuple |
81- tuple = tuple . merge ( 'working_time' => format_time_difference ( tuple [ 'working_time' ] ) )
82- exercise = attempted_exercises . find { |attempted_exercise | attempted_exercise . id == tuple [ 'exercise_id' ] }
83- statistics [ exercise ] = tuple
88+ tuple [ 'working_time' ] = format_time_difference ( tuple [ 'working_time' ] )
89+ statistics [ tuple . exercise ] = tuple
8490 end
8591
8692 render locals : {
0 commit comments