]> cat aescling's git repositories - mastodon.git/commitdiff
Remove some n+1 queries from notifications API
authorEugen Rochko <eugen@zeonfederated.com>
Mon, 21 Nov 2016 14:16:04 +0000 (15:16 +0100)
committerEugen Rochko <eugen@zeonfederated.com>
Mon, 21 Nov 2016 14:16:04 +0000 (15:16 +0100)
app/controllers/api/v1/notifications_controller.rb
app/models/notification.rb

index 509471f61e0dc7520c9bfc8fc3480660c064bbf7..63abee6b526762358afc9ec30dfbff13b7628a9d 100644 (file)
@@ -9,6 +9,8 @@ class Api::V1::NotificationsController < ApiController
   def index
     @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
     prev_path = api_v1_notifications_url(since_id: @notifications.first.id) unless @notifications.empty?
 
index 66aefcb74c94591e63dd4b3152f9b7dca5126149..419f3123040b60dc87bf045edaac0132c86ba536 100644 (file)
@@ -11,10 +11,14 @@ class Notification < ApplicationRecord
   belongs_to :follow,    foreign_type: 'Follow',    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) }
 
+  def activity
+    send(activity_type.downcase)
+  end
+
   def type
     case activity_type
     when 'Status'