about summary refs log tree commit diff
path: root/app/models
diff options
context:
space:
mode:
Diffstat (limited to 'app/models')
-rw-r--r--app/models/form/status_batch.rb39
1 files changed, 39 insertions, 0 deletions
diff --git a/app/models/form/status_batch.rb b/app/models/form/status_batch.rb
new file mode 100644
index 000000000..a97b4aa28
--- /dev/null
+++ b/app/models/form/status_batch.rb
@@ -0,0 +1,39 @@
+# frozen_string_literal: true
+
+class Form::StatusBatch
+  include ActiveModel::Model
+
+  attr_accessor :status_ids, :action
+
+  ACTION_TYPE = %w(nsfw_on nsfw_off delete).freeze
+
+  def save
+    case action
+    when 'nsfw_on', 'nsfw_off'
+      change_sensitive(action == 'nsfw_on')
+    when 'delete'
+      delete_statuses
+    end
+  end
+
+  private
+
+  def change_sensitive(sensitive)
+    media_attached_status_ids = MediaAttachment.where(status_id: status_ids).pluck(:status_id)
+    ApplicationRecord.transaction do
+      Status.where(id: media_attached_status_ids).find_each do |status|
+        status.update!(sensitive: sensitive)
+      end
+    end
+    true
+  rescue ActiveRecord::RecordInvalid
+    false
+  end
+
+  def delete_statuses
+    Status.where(id: status_ids).find_each do |status|
+      RemovalWorker.perform_async(status.id)
+    end
+    true
+  end
+end