Extract method for self-referencing records in `AccountStatusCleanupPolicy` (#31244)

pull/2835/head
Matt Jankowski 2024-09-04 04:52:37 -04:00 committed by GitHub
parent 1c17dca6d9
commit 58df00f04d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 12 additions and 3 deletions

View File

@ -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