Delete records in smaller transaction (#2802)

This commit is contained in:
alpaca-tc 2017-05-05 06:44:39 +09:00 committed by Eugen Rochko
parent eddb95b012
commit 74c8ca699c
3 changed files with 50 additions and 8 deletions

View File

@ -17,12 +17,16 @@ class SuspendAccountService < BaseService
RemoveStatusService.new.call(status) RemoveStatusService.new.call(status)
end end
@account.media_attachments.destroy_all [
@account.stream_entries.destroy_all @account.media_attachments,
@account.notifications.destroy_all @account.stream_entries,
@account.favourites.destroy_all @account.notifications,
@account.active_relationships.destroy_all @account.favourites,
@account.passive_relationships.destroy_all @account.active_relationships,
@account.passive_relationships
].each do |association|
destroy_all(association)
end
end end
def purge_profile def purge_profile
@ -35,6 +39,10 @@ class SuspendAccountService < BaseService
end end
def unsubscribe_push_subscribers def unsubscribe_push_subscribers
@account.subscriptions.destroy_all destroy_all(@account.subscriptions)
end
def destroy_all(association)
association.in_batches.destroy_all
end end
end end

View File

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

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