Remove unneeded indices, improve error handling in background workers, don't needlessly reload reblogged status, send Devise e-mails asynchronously
This commit is contained in:
		@@ -54,7 +54,7 @@ class Api::V1::StatusesController < ApiController
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def reblog
 | 
			
		||||
    @status = ReblogService.new.call(current_user.account, Status.find(params[:id])).reload
 | 
			
		||||
    @status = ReblogService.new.call(current_user.account, Status.find(params[:id]))
 | 
			
		||||
    render action: :show
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -11,6 +11,8 @@ class Notification < ApplicationRecord
 | 
			
		||||
  belongs_to :follow,    foreign_type: 'Follow',    foreign_key: 'activity_id'
 | 
			
		||||
  belongs_to :favourite, foreign_type: 'Favourite', foreign_key: 'activity_id'
 | 
			
		||||
 | 
			
		||||
  validates :account_id, uniqueness: { scope: [:activity_type, :activity_id] }
 | 
			
		||||
 | 
			
		||||
  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) }
 | 
			
		||||
 
 | 
			
		||||
@@ -16,4 +16,8 @@ class User < ApplicationRecord
 | 
			
		||||
  has_settings do |s|
 | 
			
		||||
    s.key :notification_emails, defaults: { follow: true, reblog: true, favourite: true, mention: true }
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def send_devise_notification(notification, *args)
 | 
			
		||||
    devise_mailer.send(notification, self, *args).deliver_later
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 
 | 
			
		||||
@@ -10,6 +10,8 @@ class NotifyService < BaseService
 | 
			
		||||
 | 
			
		||||
    create_notification
 | 
			
		||||
    send_email if email_enabled?
 | 
			
		||||
  rescue ActiveRecord::RecordInvalid
 | 
			
		||||
    return
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  private
 | 
			
		||||
 
 | 
			
		||||
@@ -61,7 +61,7 @@ class ProcessFeedService < BaseService
 | 
			
		||||
 | 
			
		||||
      status.save!
 | 
			
		||||
 | 
			
		||||
      NotifyService.new.call(status.reblog.account, status) if status.reblog?
 | 
			
		||||
      NotifyService.new.call(status.reblog.account, status) if status.reblog? && status.reblog.account.local?
 | 
			
		||||
      Rails.logger.debug "Queuing remote status #{status.id} (#{id}) for distribution"
 | 
			
		||||
      DistributionWorker.perform_async(status.id)
 | 
			
		||||
      status
 | 
			
		||||
 
 | 
			
		||||
@@ -5,5 +5,7 @@ class SalmonWorker
 | 
			
		||||
 | 
			
		||||
  def perform(account_id, body)
 | 
			
		||||
    ProcessInteractionService.new.call(body, Account.find(account_id))
 | 
			
		||||
  rescue ActiveRecord::RecordNotFound
 | 
			
		||||
    true
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user