has_many :following, -> { order('follows.id desc') }, through: :active_relationships, source: :target_account
has_many :followers, -> { order('follows.id desc') }, through: :passive_relationships, source: :account
+ # Account notes
+ has_many :account_notes, dependent: :destroy
+
# Block relationships
has_many :block_relationships, class_name: 'Block', foreign_key: 'account_id', dependent: :destroy
has_many :blocking, -> { order('blocks.id desc') }, through: :block_relationships, source: :target_account
include Payloadable
ASSOCIATIONS_ON_SUSPEND = %w(
+ account_notes
account_pins
active_relationships
aliases
# by foreign keys, making them safe to delete without loading
# into memory
ASSOCIATIONS_WITHOUT_SIDE_EFFECTS = %w(
+ account_notes
account_pins
aliases
conversation_mutes
--- /dev/null
+# frozen_string_literal: true
+
+class ClearOrphanedAccountNotes < ActiveRecord::Migration[5.2]
+ class Account < ApplicationRecord
+ # Dummy class, to make migration possible across version changes
+ end
+
+ class AccountNote < ApplicationRecord
+ # Dummy class, to make migration possible across version changes
+ belongs_to :account
+ belongs_to :target_account, class_name: 'Account'
+ end
+
+ def up
+ AccountNote.where('NOT EXISTS (SELECT * FROM users u WHERE u.account_id = account_notes.account_id)').in_batches.delete_all
+ end
+
+ def down
+ # nothing to do
+ end
+end
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 2021_06_30_000137) do
+ActiveRecord::Schema.define(version: 2021_08_08_071221) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
let!(:favourite_notification) { Fabricate(:notification, account: local_follower, activity: favourite, type: :favourite) }
let!(:follow_notification) { Fabricate(:notification, account: local_follower, activity: active_relationship, type: :follow) }
+ let!(:account_note) { Fabricate(:account_note, account: account) }
+
subject do
-> { described_class.new.call(account) }
end
account.active_relationships,
account.passive_relationships,
account.polls,
+ account.account_notes,
].map(&:count)
- }.from([2, 1, 1, 1, 1, 1, 1]).to([0, 0, 0, 0, 0, 0, 0])
+ }.from([2, 1, 1, 1, 1, 1, 1, 1]).to([0, 0, 0, 0, 0, 0, 0, 0])
end
it 'deletes associated target records' do