Signed-off-by: Eugen Rochko <eugen@zeonfederated.com> Co-authored-by: 40826d <74816220+40826d@users.noreply.github.com>
		
			
				
	
	
		
			83 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| # frozen_string_literal: true
 | |
| 
 | |
| class ApproveAppealService < BaseService
 | |
|   def call(appeal, current_account)
 | |
|     @appeal          = appeal
 | |
|     @strike          = appeal.strike
 | |
|     @current_account = current_account
 | |
| 
 | |
|     ApplicationRecord.transaction do
 | |
|       undo_strike_action!
 | |
|       mark_strike_as_appealed!
 | |
|     end
 | |
| 
 | |
|     queue_workers!
 | |
|     notify_target_account!
 | |
|   end
 | |
| 
 | |
|   private
 | |
| 
 | |
|   def target_account
 | |
|     @strike.target_account
 | |
|   end
 | |
| 
 | |
|   def undo_strike_action!
 | |
|     case @strike.action
 | |
|     when 'disable'
 | |
|       undo_disable!
 | |
|     when 'delete_statuses'
 | |
|       undo_delete_statuses!
 | |
|     when 'mark_statuses_as_sensitive'
 | |
|       undo_mark_statuses_as_sensitive!
 | |
|     when 'sensitive'
 | |
|       undo_sensitive!
 | |
|     when 'silence'
 | |
|       undo_silence!
 | |
|     when 'suspend'
 | |
|       undo_suspend!
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def mark_strike_as_appealed!
 | |
|     @appeal.approve!(@current_account)
 | |
|     @strike.touch(:overruled_at)
 | |
|   end
 | |
| 
 | |
|   def undo_disable!
 | |
|     target_account.user.enable!
 | |
|   end
 | |
| 
 | |
|   def undo_delete_statuses!
 | |
|     # Cannot be undone
 | |
|   end
 | |
| 
 | |
|   def undo_mark_statuses_as_sensitive!
 | |
|     representative_account = Account.representative
 | |
|     @strike.statuses.includes(:media_attachments).each do |status|
 | |
|       UpdateStatusService.new.call(status, representative_account.id, sensitive: false) if status.with_media?
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def undo_sensitive!
 | |
|     target_account.unsensitize!
 | |
|   end
 | |
| 
 | |
|   def undo_silence!
 | |
|     target_account.unsilence!
 | |
|   end
 | |
| 
 | |
|   def undo_suspend!
 | |
|     target_account.unsuspend!
 | |
|   end
 | |
| 
 | |
|   def queue_workers!
 | |
|     case @strike.action
 | |
|     when 'suspend'
 | |
|       Admin::UnsuspensionWorker.perform_async(target_account.id)
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def notify_target_account!
 | |
|     UserMailer.appeal_approved(target_account.user, @appeal).deliver_later
 | |
|   end
 | |
| end
 |