about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--app/services/suspend_account_service.rb39
1 files changed, 39 insertions, 0 deletions
diff --git a/app/services/suspend_account_service.rb b/app/services/suspend_account_service.rb
new file mode 100644
index 000000000..2361c0ec7
--- /dev/null
+++ b/app/services/suspend_account_service.rb
@@ -0,0 +1,39 @@
+# frozen_string_literal: true
+
+class SuspendAccountService < BaseService
+  def call(account)
+    @account = account
+
+    purge_content
+    purge_profile
+    unsubscribe_push_subscribers
+  end
+
+  private
+
+  def purge_content
+    @account.media_attachments.destroy_all!
+    @account.statuses.destroy_all!
+    @account.stream_entries.destroy_all!
+    @account.mentions.destroy_all!
+    @account.notifications.destroy_all!
+    @account.favourites.destroy_all!
+    @account.active_relationships.destroy_all!
+    @account.passive_relationships.destroy_all!
+  end
+
+  def purge_profile
+    @account.suspended    = true
+    @account.display_name = ''
+    @account.note         = ''
+    @account.avatar.destroy
+    @account.avatar.clear
+    @account.header.destroy
+    @account.header.clear
+    @account.save!
+  end
+
+  def unsubscribe_push_subscribers
+    @account.subscriptions.destroy_all!
+  end
+end