3e561736b2
By caching the number of personal SSH keys we reduce the number of queries necessary on pages such as ProjectsController#show (which can end up querying this data multiple times). The cache is refreshed/flushed whenever an SSH key is added, removed, or when a user is removed.
27 lines
595 B
Ruby
27 lines
595 B
Ruby
# frozen_string_literal: true
|
|
|
|
module Users
|
|
# Service class for getting the number of SSH keys that belong to a user.
|
|
class KeysCountService < BaseCountService
|
|
attr_reader :user
|
|
|
|
# user - The User for which to get the number of SSH keys.
|
|
def initialize(user)
|
|
@user = user
|
|
end
|
|
|
|
def relation_for_count
|
|
user.keys
|
|
end
|
|
|
|
def raw?
|
|
# Since we're storing simple integers we don't need all of the additional
|
|
# Marshal data Rails includes by default.
|
|
true
|
|
end
|
|
|
|
def cache_key
|
|
"users/key-count-service/#{user.id}"
|
|
end
|
|
end
|
|
end
|