Delete records in smaller transaction (#2802)
This commit is contained in:
		
							parent
							
								
									eddb95b012
								
							
						
					
					
						commit
						74c8ca699c
					
				
					 3 changed files with 50 additions and 8 deletions
				
			
		|  | @ -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 | ||||
		Reference in a new issue