Skip to content

Commit 3974ce8

Browse files
committed
Optimize studyright eligibility controller
1 parent 0728cc8 commit 3974ce8

File tree

1 file changed

+20
-19
lines changed

1 file changed

+20
-19
lines changed

app/controllers/api/v8/organizations/courses/studyright_eligibility_controller.rb

+20-19
Original file line numberDiff line numberDiff line change
@@ -37,35 +37,36 @@ def eligible_students
3737

3838
course = Course.find_by!(name: "#{params[:organization_slug]}-#{params[:course_name]}")
3939

40-
authorize! :read, course
40+
authorize! :teach, course
4141

42-
applied_students = UserAppDatum.where(field_name: 'applies_for_study_right', value: 't', namespace: 'ohjelmoinnin-mooc-2019').each { |datum| datum.user_id }
42+
applied_students = UserAppDatum.where(field_name: 'applies_for_study_right', value: 't', namespace: 'ohjelmoinnin-mooc-2019').pluck(:user_id)
4343

44-
authorize! :read, applied_students
44+
groups = course.exercise_groups[0..6] + course.exercise_groups[8..13]
4545

46-
eligible_student_ids = []
46+
cbu = course.exercise_group_completion_by_user
4747

48-
applied_students.map do |user|
49-
drop = false
50-
course.exercise_group_completion_counts_for_user(user).map do |group, info|
51-
if info[:progress] < 0.9
52-
drop = true
53-
end
54-
end
55-
eligible_student_ids.push(user) unless drop
56-
end
48+
user_ids = groups.flat_map { |group| ap = cbu[group.name][:available_points]; cbu[group.name][:points_by_user].map { |k, v| { k => (v.to_f / ap) } } }.group_by { |o| o.keys.first }.map { |k, v| { k => v.map { |o2| o2[k] } } }.inject(:merge).select { |_k, v| v.length == groups.length }.select { |_k, v| v.all? { |o2| o2 >= 0.8995 } }.map { |k, _v| k }
5749

58-
eligible_students = []
59-
60-
eligible_student_ids.map do |user_id|
61-
u = User.find(user_id)
62-
info = {
50+
eligble_ids = (user_ids & applied_students)
51+
eligible_students = User.where(id: eligble_ids).map do |u|
52+
d = {
6353
id: u.id,
6454
username: u.login,
6555
email: u.email,
6656
administrator: u.administrator
6757
}
68-
eligible_students.push(info)
58+
if user_id_to_extra_fields
59+
extra_fields = user_id_to_extra_fields[u.id] || []
60+
d[:extra_fields] = extra_fields.map { |o| [o.field_name, o.value] }.to_h
61+
end
62+
if params[:user_fields]
63+
user_fields = u.user_field_values.map { |o| [o.field_name, o.value] }.to_h
64+
d[:user_fields] = user_fields
65+
d[:student_number] = user_fields['organizational_id']
66+
d[:first_name] = user_fields['first_name']
67+
d[:last_name] = user_fields['last_name']
68+
end
69+
d
6970
end
7071

7172
render json: {

0 commit comments

Comments
 (0)