From 58df00f04d39cf25e7d4d4cbb111bc4cfe1875c4 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 4 Sep 2024 04:52:37 -0400 Subject: [PATCH] Extract method for self-referencing records in `AccountStatusCleanupPolicy` (#31244) --- app/models/account_statuses_cleanup_policy.rb | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/app/models/account_statuses_cleanup_policy.rb b/app/models/account_statuses_cleanup_policy.rb index a102795446..e2c035284b 100644 --- a/app/models/account_statuses_cleanup_policy.rb +++ b/app/models/account_statuses_cleanup_policy.rb @@ -145,15 +145,15 @@ class AccountStatusesCleanupPolicy < ApplicationRecord end def without_self_fav_scope - Status.where('NOT EXISTS (SELECT 1 FROM favourites fav WHERE fav.account_id = statuses.account_id AND fav.status_id = statuses.id)') + Status.where.not(self_status_reference_exists(Favourite)) end def without_self_bookmark_scope - Status.where('NOT EXISTS (SELECT 1 FROM bookmarks bookmark WHERE bookmark.account_id = statuses.account_id AND bookmark.status_id = statuses.id)') + Status.where.not(self_status_reference_exists(Bookmark)) end def without_pinned_scope - Status.where('NOT EXISTS (SELECT 1 FROM status_pins pin WHERE pin.account_id = statuses.account_id AND pin.status_id = statuses.id)') + Status.where.not(self_status_reference_exists(StatusPin)) end def without_media_scope @@ -174,4 +174,13 @@ class AccountStatusesCleanupPolicy < ApplicationRecord def account_statuses Status.where(account_id: account_id) end + + def self_status_reference_exists(model) + model + .where(model.arel_table[:account_id].eq Status.arel_table[:account_id]) + .where(model.arel_table[:status_id].eq Status.arel_table[:id]) + .select(1) + .arel + .exists + end end