Extract method for self-referencing records in `AccountStatusCleanupPolicy` (#31244)
parent
1c17dca6d9
commit
58df00f04d
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue