Merge branch 'main' into glitch-soc/merge-upstream
Conflicts: - `db/schema.rb`: Conflict due to glitch-soc adding the `content_type` column on status edits and thus having a different schema version number. Solved by taking upstream's schema version number, as it is higher than glitch-soc's.
This commit is contained in:
28
app/services/appeal_service.rb
Normal file
28
app/services/appeal_service.rb
Normal file
@ -0,0 +1,28 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class AppealService < BaseService
|
||||
def call(strike, text)
|
||||
@strike = strike
|
||||
@text = text
|
||||
|
||||
create_appeal!
|
||||
notify_staff!
|
||||
|
||||
@appeal
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def create_appeal!
|
||||
@appeal = @strike.create_appeal!(
|
||||
text: @text,
|
||||
account: @strike.target_account
|
||||
)
|
||||
end
|
||||
|
||||
def notify_staff!
|
||||
User.staff.includes(:account).each do |u|
|
||||
AdminMailer.new_appeal(u.account, @appeal).deliver_later if u.allows_appeal_emails?
|
||||
end
|
||||
end
|
||||
end
|
74
app/services/approve_appeal_service.rb
Normal file
74
app/services/approve_appeal_service.rb
Normal file
@ -0,0 +1,74 @@
|
||||
# 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 '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_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
|
Reference in New Issue
Block a user