|
|
- # frozen_string_literal: true
-
- class Form::AccountBatch
- include ActiveModel::Model
- include Authorization
- include Payloadable
-
- attr_accessor :account_ids, :action, :current_account
-
- def save
- case action
- when 'unfollow'
- unfollow!
- when 'remove_from_followers'
- remove_from_followers!
- when 'block_domains'
- block_domains!
- when 'approve'
- approve!
- when 'reject'
- reject!
- end
- end
-
- private
-
- def unfollow!
- accounts.find_each do |target_account|
- UnfollowService.new.call(current_account, target_account)
- end
- end
-
- def remove_from_followers!
- current_account.passive_relationships.where(account_id: account_ids).find_each do |follow|
- reject_follow!(follow)
- end
- end
-
- def block_domains!
- AfterAccountDomainBlockWorker.push_bulk(account_domains) do |domain|
- [current_account.id, domain]
- end
- end
-
- def account_domains
- accounts.pluck(Arel.sql('distinct domain')).compact
- end
-
- def accounts
- Account.where(id: account_ids)
- end
-
- def reject_follow!(follow)
- follow.destroy
-
- return unless follow.account.activitypub?
-
- ActivityPub::DeliveryWorker.perform_async(Oj.dump(serialize_payload(follow, ActivityPub::RejectFollowSerializer)), current_account.id, follow.account.inbox_url)
- end
-
- def approve!
- users = accounts.includes(:user).map(&:user)
-
- users.each { |user| authorize(user, :approve?) }
- .each(&:approve!)
- end
-
- def reject!
- records = accounts.includes(:user)
-
- records.each { |account| authorize(account.user, :reject?) }
- .each { |account| SuspendAccountService.new.call(account, reserve_email: false, reserve_username: false) }
- end
- end
|