forgeplus/app/services/cache/user_project_watchers_count...

43 lines
1.0 KiB
Ruby

class Cache::UserProjectWatchersCountService < ApplicationService
attr_reader :user, :increment_count
def initialize(user, increment_count=0)
@user = user
@increment_count = increment_count
end
def call
set_user_project_watchers_count
user_project_watchers_count
end
def reset
reset_user_project_watchers_count
user_project_watchers_count
end
private
def user_project_watchers_count_key
"user-project-watchers-count-#{user.id}"
end
def user_project_watchers_count
$redis_cache.get(user_project_watchers_count_key).to_i
end
def set_user_project_watchers_count
if $redis_cache.exists(user_project_watchers_count_key)
$redis_cache.incrby(user_project_watchers_count_key, increment_count)
else
reset_user_project_watchers_count
end
end
def reset_user_project_watchers_count
return if user.nil?
$redis_cache.set(user_project_watchers_count_key, Watcher.where(watchable_type: 'Project', watchable_id: user.projects).count)
end
end