diff options
author | Eugen Rochko <eugen@zeonfederated.com> | 2018-02-18 03:14:46 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-02-18 03:14:46 +0100 |
commit | cba2897108dffe69d5a16befe6c6220f6eaae59f (patch) | |
tree | e247261ff56fa1751e914d650a4a4710c6417dd1 /app/models | |
parent | 9b8a4484778fb55bcb2526992807a51270229b72 (diff) |
Cache relationships in API (#6482)
* Cache relationships in API * Fetch relationships for search results in UI * Only save one account's maps in each cache item
Diffstat (limited to 'app/models')
-rw-r--r-- | app/models/account_domain_block.rb | 8 | ||||
-rw-r--r-- | app/models/block.rb | 4 | ||||
-rw-r--r-- | app/models/concerns/relationship_cacheable.rb | 16 | ||||
-rw-r--r-- | app/models/follow.rb | 1 | ||||
-rw-r--r-- | app/models/follow_request.rb | 1 | ||||
-rw-r--r-- | app/models/mute.rb | 4 |
6 files changed, 28 insertions, 6 deletions
diff --git a/app/models/account_domain_block.rb b/app/models/account_domain_block.rb index abcc923b3..bc00b4f32 100644 --- a/app/models/account_domain_block.rb +++ b/app/models/account_domain_block.rb @@ -16,12 +16,16 @@ class AccountDomainBlock < ApplicationRecord belongs_to :account validates :domain, presence: true, uniqueness: { scope: :account_id } - after_create :remove_blocking_cache - after_destroy :remove_blocking_cache + after_commit :remove_blocking_cache + after_commit :remove_relationship_cache private def remove_blocking_cache Rails.cache.delete("exclude_domains_for:#{account_id}") end + + def remove_relationship_cache + Rails.cache.delete_matched("relationship:#{account_id}:*") + end end diff --git a/app/models/block.rb b/app/models/block.rb index 441e6bca3..d6ecabd3b 100644 --- a/app/models/block.rb +++ b/app/models/block.rb @@ -12,14 +12,14 @@ class Block < ApplicationRecord include Paginable + include RelationshipCacheable belongs_to :account belongs_to :target_account, class_name: 'Account' validates :account_id, uniqueness: { scope: :target_account_id } - after_create :remove_blocking_cache - after_destroy :remove_blocking_cache + after_commit :remove_blocking_cache private diff --git a/app/models/concerns/relationship_cacheable.rb b/app/models/concerns/relationship_cacheable.rb new file mode 100644 index 000000000..0d9359f7e --- /dev/null +++ b/app/models/concerns/relationship_cacheable.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +module RelationshipCacheable + extend ActiveSupport::Concern + + included do + after_commit :remove_relationship_cache + end + + private + + def remove_relationship_cache + Rails.cache.delete("relationship:#{account_id}:#{target_account_id}") + Rails.cache.delete("relationship:#{target_account_id}:#{account_id}") + end +end diff --git a/app/models/follow.rb b/app/models/follow.rb index f953b8e3e..8e6fe537a 100644 --- a/app/models/follow.rb +++ b/app/models/follow.rb @@ -13,6 +13,7 @@ class Follow < ApplicationRecord include Paginable + include RelationshipCacheable belongs_to :account, counter_cache: :following_count diff --git a/app/models/follow_request.rb b/app/models/follow_request.rb index bd6c4a0b9..cde26ceed 100644 --- a/app/models/follow_request.rb +++ b/app/models/follow_request.rb @@ -13,6 +13,7 @@ class FollowRequest < ApplicationRecord include Paginable + include RelationshipCacheable belongs_to :account belongs_to :target_account, class_name: 'Account' diff --git a/app/models/mute.rb b/app/models/mute.rb index 948f22444..8efa27ac0 100644 --- a/app/models/mute.rb +++ b/app/models/mute.rb @@ -13,14 +13,14 @@ class Mute < ApplicationRecord include Paginable + include RelationshipCacheable belongs_to :account belongs_to :target_account, class_name: 'Account' validates :account_id, uniqueness: { scope: :target_account_id } - after_create :remove_blocking_cache - after_destroy :remove_blocking_cache + after_commit :remove_blocking_cache private |