21 lines
624 B
Ruby
21 lines
624 B
Ruby
module RatingVotes
|
|
class AssignRatingWorker
|
|
include Sidekiq::Job
|
|
|
|
sidekiq_options queue: :low_priority, retry: 10, lock: :until_executing
|
|
|
|
def perform(article_id, group = "experience_level")
|
|
article = Article.find_by(id: article_id)
|
|
return unless article
|
|
|
|
ratings = article.rating_votes.where(group: group).pluck(:rating)
|
|
average = ratings.sum / ratings.size
|
|
|
|
article.update_columns(
|
|
experience_level_rating: average,
|
|
experience_level_rating_distribution: ratings.max - ratings.min,
|
|
last_experience_level_rating_at: Time.current,
|
|
)
|
|
end
|
|
end
|
|
end
|