Browse Source

Delete records in smaller transaction (#2802)

pull/4/head
alpaca-tc 5 years ago
committed by Eugen Rochko
parent
commit
74c8ca699c
3 changed files with 50 additions and 8 deletions
  1. +15
    -7
      app/services/suspend_account_service.rb
  2. +2
    -1
      spec/fabricators/favourite_fabricator.rb
  3. +33
    -0
      spec/services/suspend_account_service_spec.rb

+ 15
- 7
app/services/suspend_account_service.rb View File

@ -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

+ 2
- 1
spec/fabricators/favourite_fabricator.rb View File

@ -1,3 +1,4 @@
Fabricator(:favourite) do
account
status
end

+ 33
- 0
spec/services/suspend_account_service_spec.rb View 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…
Cancel
Save