splitted user in groups for assigning bonus exercises

This commit is contained in:
Thomas Hille
2017-03-24 12:14:53 +01:00
parent 4798ffcfcf
commit ef5ebc3b69
2 changed files with 38 additions and 20 deletions

View File

@ -53,28 +53,43 @@ class ProxyExercise < ActiveRecord::Base
end end
def find_matching_exercise(user) def find_matching_exercise(user)
exercises_user_has_accessed = user.submissions.where("cause IN ('submit','assess')").map{|s| s.exercise}.uniq user_group = UserGroupSeparator.getProxyExerciseGroup(user)
tags_user_has_seen = exercises_user_has_accessed.map{|ex| ex.tags}.uniq.flatten case user_group
Rails.logger.debug("exercises_user_has_accessed #{exercises_user_has_accessed.map{|e|e.id}.join(",")}") when :dummy_assigment
rec_ex = select_easiest_exercise(exercises)
@reason[:reason] = "dummy group"
Rails.logger.debug("assigned user to dummy group, and gave him exercise: #{rec_ex.title}")
rec_ex
when :random_assigment
@reason[:reason] = "random group"
rec_ex = exercises.shuffle.first
Rails.logger.debug("assigned user to random group, and gave him exercise: #{rec_ex.title}")
rec_ex
when :recommended_assignment
exercises_user_has_accessed = user.submissions.where("cause IN ('submit','assess')").map{|s| s.exercise}.uniq.compact
tags_user_has_seen = exercises_user_has_accessed.map{|ex| ex.tags}.uniq.flatten
Rails.logger.debug("exercises_user_has_accessed #{exercises_user_has_accessed.map{|e|e.id}.join(",")}")
# find execises # find execises
potential_recommended_exercises = [] potential_recommended_exercises = []
exercises.each do |ex| exercises.each do |ex|
## find exercises which have only tags the user has already seen ## find exercises which have only tags the user has already seen
if (ex.tags - tags_user_has_seen).empty? if (ex.tags - tags_user_has_seen).empty?
potential_recommended_exercises << ex potential_recommended_exercises << ex
end end
end end
Rails.logger.debug("potential_recommended_exercises: #{potential_recommended_exercises.map{|e|e.id}}") Rails.logger.debug("potential_recommended_exercises: #{potential_recommended_exercises.map{|e|e.id}}")
# if all exercises contain tags which the user has never seen, recommend easiest exercise # if all exercises contain tags which the user has never seen, recommend easiest exercise
if potential_recommended_exercises.empty? if potential_recommended_exercises.empty?
Rails.logger.debug("matched easiest exercise in pool") Rails.logger.debug("matched easiest exercise in pool")
@reason[:reason] = "easiest exercise in pool. empty potential exercises" @reason[:reason] = "easiest exercise in pool. empty potential exercises"
select_easiest_exercise(exercises) select_easiest_exercise(exercises)
else else
recommended_exercise = select_best_matching_exercise(user, exercises_user_has_accessed, potential_recommended_exercises) recommended_exercise = select_best_matching_exercise(user, exercises_user_has_accessed, potential_recommended_exercises)
recommended_exercise recommended_exercise
end
end end
end end
private :find_matching_exercise private :find_matching_exercise

View File

@ -16,10 +16,13 @@ class UserGroupSeparator
def self.getProxyExerciseGroup(user) def self.getProxyExerciseGroup(user)
lastDigitCreatedAt = user.created_at.to_i % 10 lastDigitCreatedAt = user.created_at.to_i % 10
if lastDigitCreatedAt < 2 # 0,1 if lastDigitCreatedAt < 2 # 0,1
puts "dummy"
:dummy_assigment :dummy_assigment
elsif lastDigitCreatedAt < 4 # 2,3 elsif lastDigitCreatedAt < 4 # 2,3
puts "random_assignment"
:random_assigment :random_assigment
else # 4,5,6,7,8,9 else # 4,5,6,7,8,9
puts "recommended_assignment"
:recommended_assignment :recommended_assignment
end end
end end