From e7a0f77f8b3eba2351df4645dba2ae10e24358d3 Mon Sep 17 00:00:00 2001
From: Mateus Rambo Strey <mars11@inf.ufpr.br>
Date: Tue, 27 Oct 2015 10:09:22 -0200
Subject: [PATCH] add weights to learning objects score

---
 .../orient_db/learning_object_repository.rb        | 14 ++++++++++++++
 app/workers/score_calculator_worker.rb             |  9 +++++----
 2 files changed, 19 insertions(+), 4 deletions(-)

diff --git a/app/repositories/orient_db/learning_object_repository.rb b/app/repositories/orient_db/learning_object_repository.rb
index a1c40c5a..718302ec 100644
--- a/app/repositories/orient_db/learning_object_repository.rb
+++ b/app/repositories/orient_db/learning_object_repository.rb
@@ -245,6 +245,20 @@ module OrientDb
       get_in_edges_count "Views", learning_object.id
     end
 
+    def max_likes
+      Rails.cache.fetch('max_likes', expires_in: 6.hours) do
+        max = connection.command 'SELECT max(in("Likes").size()) FROM LearningObject'
+        max["result"][0]["max"]
+      end
+    end
+
+    def max_views
+      Rails.cache.fetch('max_views', expires_in: 6.hours) do
+        max = connection.command 'SELECT max(in("Views").size()) FROM LearningObject'
+        max["result"][0]["max"]
+      end
+    end
+
     private
 
     def accepted_properties
diff --git a/app/workers/score_calculator_worker.rb b/app/workers/score_calculator_worker.rb
index c983bb87..7c12e742 100644
--- a/app/workers/score_calculator_worker.rb
+++ b/app/workers/score_calculator_worker.rb
@@ -4,24 +4,25 @@ class ScoreCalculatorWorker
   include RepositoriesProxy
 
   def perform(rid)
+    weights = {"thumbnail": 40, "likes": 20, "views": 10, "description": 30}
 
     object = learning_object_repository.find(rid)
 
     score = 0
 
     # 40 points if it has thumbnail
-    score += 40 unless object.thumbnail.empty?
+    score += weights[:thumbnail] unless object.thumbnail.empty?
 
     # 1 point per like
     likes = learning_object_repository.count_likes(object)
-    score += (likes * 1) unless likes < 1
+    score += (likes / learning_object_repository.max_likes)*weights[:likes]  unless likes < 1
 
     # 1 point per view
     views = learning_object_repository.count_views(object)
-    score += (views * 1) unless views < 1
+    score += (views / learning_object_repository.max_views)*weights[:views] unless views < 1
 
     # 30 points if it has description
-    score += 30 unless object.decription.empty?
+    score += weights[:description] unless object.decription.empty?
 
     learning_object_repository.update_property(object, 'score', score)
   end
-- 
GitLab