3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
# File 'app/workers/restaurants/weighted_score_worker.rb', line 3
def perform(restaurant_id)
restaurant = Restaurant.find_by(id: restaurant_id)
return if restaurant.blank?
branch = restaurant.branch
review_stat = if branch.present?
Restaurants::ReviewStat.find_by branch: branch
else
Restaurants::ReviewStat.find_by restaurant: restaurant
end
return if review_stat.blank?
v = review_stat.total
m = AdminSetting.avg_restaurants_reviews_count
r = review_stat.average
c = AdminSetting.avg_restaurants_reviews_score
weighted_score = (v.to_f / (v.to_f + m.to_f)) * r.to_f + (m.to_f / (v.to_f + m.to_f)) * c.to_f
restaurant.update(weighted_score: weighted_score.round(2))
Restaurants::UpdateAttributesWorker.perform_async restaurant.id
end
|