Extract method for account-referencing in CLI prune task (#31824)
This commit is contained in:
parent
da07adfe6c
commit
c4b09d684e
1 changed files with 26 additions and 11 deletions
|
@ -502,17 +502,7 @@ module Mastodon::CLI
|
|||
- not muted/blocked by us
|
||||
LONG_DESC
|
||||
def prune
|
||||
query = Account.remote.non_automated
|
||||
query = query.where('NOT EXISTS (SELECT 1 FROM mentions WHERE account_id = accounts.id)')
|
||||
query = query.where('NOT EXISTS (SELECT 1 FROM favourites WHERE account_id = accounts.id)')
|
||||
query = query.where('NOT EXISTS (SELECT 1 FROM statuses WHERE account_id = accounts.id)')
|
||||
query = query.where('NOT EXISTS (SELECT 1 FROM follows WHERE account_id = accounts.id OR target_account_id = accounts.id)')
|
||||
query = query.where('NOT EXISTS (SELECT 1 FROM blocks WHERE account_id = accounts.id OR target_account_id = accounts.id)')
|
||||
query = query.where('NOT EXISTS (SELECT 1 FROM mutes WHERE target_account_id = accounts.id)')
|
||||
query = query.where('NOT EXISTS (SELECT 1 FROM reports WHERE target_account_id = accounts.id)')
|
||||
query = query.where('NOT EXISTS (SELECT 1 FROM follow_requests WHERE account_id = accounts.id OR target_account_id = accounts.id)')
|
||||
|
||||
_, deleted = parallelize_with_progress(query) do |account|
|
||||
_, deleted = parallelize_with_progress(prunable_accounts) do |account|
|
||||
next if account.bot? || account.group?
|
||||
next if account.suspended?
|
||||
next if account.silenced?
|
||||
|
@ -577,6 +567,31 @@ module Mastodon::CLI
|
|||
|
||||
private
|
||||
|
||||
def prunable_accounts
|
||||
Account
|
||||
.remote
|
||||
.non_automated
|
||||
.where.not(referencing_account(Mention, :account_id))
|
||||
.where.not(referencing_account(Favourite, :account_id))
|
||||
.where.not(referencing_account(Status, :account_id))
|
||||
.where.not(referencing_account(Follow, :account_id))
|
||||
.where.not(referencing_account(Follow, :target_account_id))
|
||||
.where.not(referencing_account(Block, :account_id))
|
||||
.where.not(referencing_account(Block, :target_account_id))
|
||||
.where.not(referencing_account(Mute, :target_account_id))
|
||||
.where.not(referencing_account(Report, :target_account_id))
|
||||
.where.not(referencing_account(FollowRequest, :account_id))
|
||||
.where.not(referencing_account(FollowRequest, :target_account_id))
|
||||
end
|
||||
|
||||
def referencing_account(model, attribute)
|
||||
model
|
||||
.where(model.arel_table[attribute].eq Account.arel_table[:id])
|
||||
.select(1)
|
||||
.arel
|
||||
.exists
|
||||
end
|
||||
|
||||
def report_errors(errors)
|
||||
message = errors.map do |error|
|
||||
<<~STRING
|
||||
|
|
Loading…
Reference in a new issue