Delete records in smaller transaction (#2802)
This commit is contained in:
		
							parent
							
								
									eddb95b012
								
							
						
					
					
						commit
						74c8ca699c
					
				@ -17,12 +17,16 @@ class SuspendAccountService < BaseService
 | 
			
		||||
      RemoveStatusService.new.call(status)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    @account.media_attachments.destroy_all
 | 
			
		||||
    @account.stream_entries.destroy_all
 | 
			
		||||
    @account.notifications.destroy_all
 | 
			
		||||
    @account.favourites.destroy_all
 | 
			
		||||
    @account.active_relationships.destroy_all
 | 
			
		||||
    @account.passive_relationships.destroy_all
 | 
			
		||||
    [
 | 
			
		||||
      @account.media_attachments,
 | 
			
		||||
      @account.stream_entries,
 | 
			
		||||
      @account.notifications,
 | 
			
		||||
      @account.favourites,
 | 
			
		||||
      @account.active_relationships,
 | 
			
		||||
      @account.passive_relationships
 | 
			
		||||
    ].each do |association|
 | 
			
		||||
      destroy_all(association)
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def purge_profile
 | 
			
		||||
@ -35,6 +39,10 @@ class SuspendAccountService < BaseService
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def unsubscribe_push_subscribers
 | 
			
		||||
    @account.subscriptions.destroy_all
 | 
			
		||||
    destroy_all(@account.subscriptions)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def destroy_all(association)
 | 
			
		||||
    association.in_batches.destroy_all
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
@ -1,3 +1,4 @@
 | 
			
		||||
Fabricator(:favourite) do
 | 
			
		||||
 | 
			
		||||
  account
 | 
			
		||||
  status
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										33
									
								
								spec/services/suspend_account_service_spec.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								spec/services/suspend_account_service_spec.rb
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,33 @@
 | 
			
		||||
require 'rails_helper'
 | 
			
		||||
 | 
			
		||||
RSpec.describe SuspendAccountService do
 | 
			
		||||
  describe '#call' do
 | 
			
		||||
    subject do
 | 
			
		||||
      -> { described_class.new.call(account) }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    let!(:account) { Fabricate(:account) }
 | 
			
		||||
    let!(:status) { Fabricate(:status, account: account) }
 | 
			
		||||
    let!(:media_attachment) { Fabricate(:media_attachment, account: account) }
 | 
			
		||||
    let!(:notification) { Fabricate(:notification, account: account) }
 | 
			
		||||
    let!(:favourite) { Fabricate(:favourite, account: account) }
 | 
			
		||||
    let!(:active_relationship) { Fabricate(:follow, account: account) }
 | 
			
		||||
    let!(:passive_relationship) { Fabricate(:follow, target_account: account) }
 | 
			
		||||
    let!(:subscription) { Fabricate(:subscription, account: account) }
 | 
			
		||||
 | 
			
		||||
    it 'deletes associated records' do
 | 
			
		||||
      is_expected.to change {
 | 
			
		||||
        [
 | 
			
		||||
          account.statuses,
 | 
			
		||||
          account.media_attachments,
 | 
			
		||||
          account.stream_entries,
 | 
			
		||||
          account.notifications,
 | 
			
		||||
          account.favourites,
 | 
			
		||||
          account.active_relationships,
 | 
			
		||||
          account.passive_relationships,
 | 
			
		||||
          account.subscriptions
 | 
			
		||||
        ].map(&:count)
 | 
			
		||||
      }.from([1, 1, 1, 1, 1, 1, 1, 1]).to([0, 0, 0, 0, 0, 0, 0, 0])
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user