diff options
author | Eugen Rochko <eugen@zeonfederated.com> | 2016-11-23 08:34:35 +0100 |
---|---|---|
committer | Eugen Rochko <eugen@zeonfederated.com> | 2016-11-23 08:34:35 +0100 |
commit | cf912e01fd74e7320eb4027c35f7744a36d2f2b8 (patch) | |
tree | 53ae364786c70f0aff47e3ea6086c0ac821f4269 /app/models/status.rb | |
parent | 5c78547198de20e7f367adb142acc82cd80b4899 (diff) |
Implement includes caching for timelines APIs
Diffstat (limited to 'app/models/status.rb')
-rw-r--r-- | app/models/status.rb | 13 |
1 files changed, 5 insertions, 8 deletions
diff --git a/app/models/status.rb b/app/models/status.rb index 708fef17f..3402929bf 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -27,7 +27,7 @@ class Status < ApplicationRecord default_scope { order('id desc') } scope :with_counters, -> { select('statuses.*, (select count(r.id) from statuses as r where r.reblog_of_id = statuses.id) as reblogs_count, (select count(f.id) from favourites as f where f.status_id = statuses.id) as favourites_count') } - scope :with_includes, -> { includes(:account, :media_attachments, :tags, :stream_entry, mentions: :account, reblog: [:account, :stream_entry, :tags, mentions: :account], thread: :account) } + scope :with_includes, -> { includes(:account, :media_attachments, :tags, :stream_entry, mentions: :account, reblog: [:account, :stream_entry, :tags, :media_attachments, mentions: :account], thread: :account) } def local? uri.nil? @@ -89,28 +89,25 @@ class Status < ApplicationRecord class << self def as_home_timeline(account) - where(account: [account] + account.following).with_includes.with_counters + where(account: [account] + account.following).with_includes end def as_mentions_timeline(account) - where(id: Mention.where(account: account).pluck(:status_id)).with_includes.with_counters + where(id: Mention.where(account: account).pluck(:status_id)).with_includes end def as_public_timeline(account = nil) query = joins('LEFT OUTER JOIN accounts ON statuses.account_id = accounts.id').where('accounts.silenced = FALSE') query = filter_timeline(query, account) unless account.nil? - - query.with_includes.with_counters + query end def as_tag_timeline(tag, account = nil) query = tag.statuses .joins('LEFT OUTER JOIN accounts ON statuses.account_id = accounts.id') .where('accounts.silenced = FALSE') - query = filter_timeline(query, account) unless account.nil? - - query.with_includes.with_counters + query end def favourites_map(status_ids, account_id) |