about summary refs log tree commit diff
path: root/app/models
diff options
context:
space:
mode:
authorEugen Rochko <eugen@zeonfederated.com>2019-08-22 21:55:56 +0200
committermultiple creatures <dev@multiple-creature.party>2020-02-27 13:43:13 -0600
commit422b59808b4818171e057e1a459de153816bf505 (patch)
tree5320830d5d3146c9032a0e975a069a4a1be76253 /app/models
parent165f53238655bf87f27981282ca8deb71474c86f (diff)
port tootsuite#11623 to monsterfork: Add soft delete for statuses for instant deletes through API
* Add soft delete for statuses to allow them to appear instant

* Allow reporting soft-deleted statuses and show them in the admin UI

* Change index for getting an account's statuses
Diffstat (limited to 'app/models')
-rw-r--r--app/models/form/status_batch.rb1
-rw-r--r--app/models/report.rb2
-rw-r--r--app/models/status.rb5
3 files changed, 6 insertions, 2 deletions
diff --git a/app/models/form/status_batch.rb b/app/models/form/status_batch.rb
index 3b82b5551..91710a5d7 100644
--- a/app/models/form/status_batch.rb
+++ b/app/models/form/status_batch.rb
@@ -33,6 +33,7 @@ class Form::StatusBatch
 
   def delete_statuses
     Status.where(id: status_ids).reorder(nil).find_each do |status|
+      status.discard
       RemovalWorker.perform_async(status.id, redraft: false)
       Tombstone.find_or_create_by(uri: status.uri, account: status.account, by_moderator: true)
       log_action :destroy, status
diff --git a/app/models/report.rb b/app/models/report.rb
index fe825759a..07389ef63 100644
--- a/app/models/report.rb
+++ b/app/models/report.rb
@@ -40,7 +40,7 @@ class Report < ApplicationRecord
   end
 
   def statuses
-    Status.where(id: status_ids).includes(:account, :media_attachments, :mentions)
+    Status.with_discarded.where(id: status_ids).includes(:account, :media_attachments, :mentions)
   end
 
   def media_attachments
diff --git a/app/models/status.rb b/app/models/status.rb
index 5caed1b20..2d2b0aafe 100644
--- a/app/models/status.rb
+++ b/app/models/status.rb
@@ -32,11 +32,13 @@
 #  reject_replies         :boolean
 #  tsv                    :tsvector
 #  hidden                 :boolean
+#  deleted_at             :datetime
 #
 
 class Status < ApplicationRecord
   before_destroy :unlink_from_conversations
 
+  include Discard::Model
   include Paginable
   include Cacheable
   include StatusThreadingConcern
@@ -45,6 +47,7 @@ class Status < ApplicationRecord
   LOCAL_ONLY_TOKENS = /(?:#!|\u{1f441}\ufe0f?)\u200b?\z/
   REJECT_REPLIES_TOKENS = /^(?:please )?(?:ms_dont_at_me|no (?:replie|mention)s|(?:dont|do not) (?:@|at|reply|mention|interact)(?: (?:me|us))?)\b/i
   SIMPLIFIED = /[^\w\s@_\"\'\-]+/
+  self.discard_column = :deleted_at
 
   # If `override_timestamps` is set at creation time, Snowflake ID creation
   # will be based on current time instead of `created_at`
@@ -95,7 +98,7 @@ class Status < ApplicationRecord
 
   accepts_nested_attributes_for :poll
 
-  default_scope { recent }
+  default_scope { recent.kept }
 
   scope :recent, -> { reorder(id: :desc) }
   scope :remote, -> { where(local: false).or(where.not(uri: nil)) }