Domain block service cleanup (#2490)
* Add coverage for domain block service with silence * Get rid of warning about find_each and order * Move domain_block to attr_reader * Move optional clear_media into silence_accounts method * Use blocked_domain method to reduce passed vars * Extract blocked_domain_accounts method to find accounts on the domain * Extract media_from_blocked_domain method to find relevant attachments * Separate destruction of account images and account attachmentsmaster
parent
affd75936e
commit
8857cabca4
@ -1,36 +1,62 @@ |
|||||||
# frozen_string_literal: true |
# frozen_string_literal: true |
||||||
|
|
||||||
class BlockDomainService < BaseService |
class BlockDomainService < BaseService |
||||||
|
attr_reader :domain_block |
||||||
|
|
||||||
def call(domain_block) |
def call(domain_block) |
||||||
|
@domain_block = domain_block |
||||||
|
process_domain_block |
||||||
|
end |
||||||
|
|
||||||
|
private |
||||||
|
|
||||||
|
def process_domain_block |
||||||
if domain_block.silence? |
if domain_block.silence? |
||||||
silence_accounts!(domain_block.domain) |
silence_accounts! |
||||||
clear_media!(domain_block.domain) if domain_block.reject_media? |
|
||||||
else |
else |
||||||
suspend_accounts!(domain_block.domain) |
suspend_accounts! |
||||||
end |
end |
||||||
end |
end |
||||||
|
|
||||||
private |
def silence_accounts! |
||||||
|
blocked_domain_accounts.update_all(silenced: true) |
||||||
|
clear_media! if domain_block.reject_media? |
||||||
|
end |
||||||
|
|
||||||
|
def clear_media! |
||||||
|
clear_account_images |
||||||
|
clear_account_attachments |
||||||
|
end |
||||||
|
|
||||||
def silence_accounts!(domain) |
def suspend_accounts! |
||||||
Account.where(domain: domain).update_all(silenced: true) |
blocked_domain_accounts.where(suspended: false).find_each do |account| |
||||||
|
account.subscription(api_subscription_url(account.id)).unsubscribe if account.subscribed? |
||||||
|
SuspendAccountService.new.call(account) |
||||||
|
end |
||||||
end |
end |
||||||
|
|
||||||
def clear_media!(domain) |
def clear_account_images |
||||||
Account.where(domain: domain).find_each do |account| |
blocked_domain_accounts.find_each do |account| |
||||||
account.avatar.destroy |
account.avatar.destroy |
||||||
account.header.destroy |
account.header.destroy |
||||||
end |
end |
||||||
|
end |
||||||
|
|
||||||
MediaAttachment.where(account: Account.where(domain: domain)).find_each do |attachment| |
def clear_account_attachments |
||||||
|
media_from_blocked_domain.find_each do |attachment| |
||||||
attachment.file.destroy |
attachment.file.destroy |
||||||
end |
end |
||||||
end |
end |
||||||
|
|
||||||
def suspend_accounts!(domain) |
def blocked_domain |
||||||
Account.where(domain: domain).where(suspended: false).find_each do |account| |
domain_block.domain |
||||||
account.subscription(api_subscription_url(account.id)).unsubscribe if account.subscribed? |
end |
||||||
SuspendAccountService.new.call(account) |
|
||||||
|
def blocked_domain_accounts |
||||||
|
Account.where(domain: blocked_domain) |
||||||
end |
end |
||||||
|
|
||||||
|
def media_from_blocked_domain |
||||||
|
MediaAttachment.where(account: blocked_domain_accounts).reorder(nil) |
||||||
end |
end |
||||||
end |
end |
||||||
|
Loading…
Reference in new issue