mirror of https://github.com/mastodon/mastodon.git
Remove some n+1 queries from notifications API
parent
e8c27767aa
commit
52119104b9
|
@ -9,6 +9,8 @@ class Api::V1::NotificationsController < ApiController
|
||||||
def index
|
def index
|
||||||
@notifications = Notification.where(account: current_account).with_includes.paginate_by_max_id(20, params[:max_id], params[:since_id])
|
@notifications = Notification.where(account: current_account).with_includes.paginate_by_max_id(20, params[:max_id], params[:since_id])
|
||||||
|
|
||||||
|
set_maps(@notifications.select { |n| !n.target_status.nil? }.map(&:target_status))
|
||||||
|
|
||||||
next_path = api_v1_notifications_url(max_id: @notifications.last.id) if @notifications.size == 20
|
next_path = api_v1_notifications_url(max_id: @notifications.last.id) if @notifications.size == 20
|
||||||
prev_path = api_v1_notifications_url(since_id: @notifications.first.id) unless @notifications.empty?
|
prev_path = api_v1_notifications_url(since_id: @notifications.first.id) unless @notifications.empty?
|
||||||
|
|
||||||
|
|
|
@ -11,10 +11,14 @@ class Notification < ApplicationRecord
|
||||||
belongs_to :follow, foreign_type: 'Follow', foreign_key: 'activity_id'
|
belongs_to :follow, foreign_type: 'Follow', foreign_key: 'activity_id'
|
||||||
belongs_to :favourite, foreign_type: 'Favourite', foreign_key: 'activity_id'
|
belongs_to :favourite, foreign_type: 'Favourite', foreign_key: 'activity_id'
|
||||||
|
|
||||||
STATUS_INCLUDES = [:account, :media_attachments, mentions: :account, reblog: [:account, mentions: :account]].freeze
|
STATUS_INCLUDES = [:account, :stream_entry, :media_attachments, :tags, mentions: :account, reblog: [:stream_entry, :account, :media_attachments, :tags, mentions: :account]].freeze
|
||||||
|
|
||||||
scope :with_includes, -> { includes(status: STATUS_INCLUDES, mention: [status: STATUS_INCLUDES], favourite: [:account, status: STATUS_INCLUDES], follow: :account) }
|
scope :with_includes, -> { includes(status: STATUS_INCLUDES, mention: [status: STATUS_INCLUDES], favourite: [:account, status: STATUS_INCLUDES], follow: :account) }
|
||||||
|
|
||||||
|
def activity
|
||||||
|
send(activity_type.downcase)
|
||||||
|
end
|
||||||
|
|
||||||
def type
|
def type
|
||||||
case activity_type
|
case activity_type
|
||||||
when 'Status'
|
when 'Status'
|
||||||
|
|
Loading…
Reference in New Issue