@@ -90,30 +90,22 @@ def render_student_index(school_classes)
9090 end
9191
9292 def calculate_unread_counts ( school_classes )
93- school_classes . map do |school_class |
94- lessons = school_class . lessons . accessible_by ( current_ability )
95- remixes = user_remixes_for_lessons ( lessons )
96-
97- remixes . count do |remix |
98- remix &.school_project &.feedback &.exists? ( read_at : nil )
99- end
100- end
101- end
102-
103- def user_remixes_for_lessons ( lessons )
104- lessons . filter_map do |lesson |
105- next nil unless lesson &.project &.remixes &.exists?
106-
107- user_remix_for_lesson ( lesson )
108- end
109- end
110-
111- def user_remix_for_lesson ( lesson )
112- lesson . project &.remixes &.where ( user_id : current_user . id )
113- &.accessible_by ( current_ability )
114- &.order ( created_at : :asc )
115- &.includes ( school_project : :feedback )
116- &.first
93+ class_ids = school_classes . map ( &:id )
94+
95+ # Count unread feedback per class in a single query
96+ counts_by_class_id =
97+ Feedback
98+ . joins ( school_project : { project : { lesson : :school_class } } )
99+ . where (
100+ read_at : nil ,
101+ projects : { user_id : current_user . id } ,
102+ school_classes : { id : class_ids }
103+ )
104+ . group ( 'school_classes.id' )
105+ . count
106+
107+ # Return counts in the same order as school_classes
108+ school_classes . map { |school_class | counts_by_class_id [ school_class . id ] || 0 }
117109 end
118110
119111 def find_or_create_school_class ( school_class_params )
0 commit comments