From 422b59808b4818171e057e1a459de153816bf505 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Thu, 22 Aug 2019 21:55:56 +0200 Subject: 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 --- app/models/form/status_batch.rb | 1 + app/models/report.rb | 2 +- app/models/status.rb | 5 ++++- 3 files changed, 6 insertions(+), 2 deletions(-) (limited to 'app/models') 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)) } -- cgit