diff --git a/app/repositories/orient_db/learning_object_repository.rb b/app/repositories/orient_db/learning_object_repository.rb index 6f7b657cf376841892e677f9f1e33745b13f4424..96eb55b717ea2c4eb741e6ad30f304d42a7bc9ec 100644 --- a/app/repositories/orient_db/learning_object_repository.rb +++ b/app/repositories/orient_db/learning_object_repository.rb @@ -322,7 +322,7 @@ module OrientDb end def get_max_from_edge(edge_class, type) - max = connection.command 'SELECT max(#{type}("#{edge_class}").size()) FROM LearningObject' + max = connection.command "SELECT max(#{type}('#{edge_class}').size()) FROM LearningObject" max["result"][0]["max"] end diff --git a/app/workers/score_calculator_worker.rb b/app/workers/score_calculator_worker.rb index 6f1f6f99d15cd16480111219be944ee79ab6ccc3..794b410b2567e51419b37d090016afd5f284c0e5 100644 --- a/app/workers/score_calculator_worker.rb +++ b/app/workers/score_calculator_worker.rb @@ -25,17 +25,37 @@ class ScoreCalculatorWorker score += weights[:description] unless object.description.blank? # range to 250 points, for normalized likes ( maxLikes/actualLike => [0..1] ) - likes = learning_object_repository.count_likes(object) - score += (likes / learning_object_repository.max_likes)*weights[:likes] unless likes < 1 + score += divide_by_max( + learning_object_repository.count_likes(object), + learning_object_repository.max_likes, + weights[:likes] + ) # range to 200 points, for normalized views ( maxLikes/actualLike => [0..1] ) - views = learning_object_repository.count_views(object) - score += (views / learning_object_repository.max_views)*weights[:views] unless views < 1 - - downloads = learning_object_repository.count_downloads(object) - score += (downloads / learning_object_repository.max_downloads)*weights[:downloads] unless downloads < 1 + score += divide_by_max( + learning_object_repository.count_views(object), + learning_object_repository.max_views, + weights[:views] + ) + + # downloads + score += divide_by_max( + learning_object_repository.count_downloads(object), + learning_object_repository.max_downloads, + weights[:downloads] + ) learning_object_repository.update_property(object, 'score', score) end end + + private + + def divide_by_max(i, max, weight) + if (i > 0 && max > 0) && (i <= max) + (i / max) * weight + else + 0 + end + end end