Remove default_scope from Admin::ActionLog (#28026)

This commit is contained in:
Matt Jankowski 2023-11-29 05:39:59 -05:00 committed by GitHub
parent 291dc04e67
commit e48ecd2929
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 20 additions and 16 deletions

View File

@ -6,7 +6,7 @@ module Admin
def index def index
authorize :audit_log, :index? authorize :audit_log, :index?
@auditable_accounts = Account.where(id: Admin::ActionLog.reorder(nil).select('distinct account_id')).select(:id, :username) @auditable_accounts = Account.where(id: Admin::ActionLog.select('distinct account_id')).select(:id, :username)
end end
private private

View File

@ -24,12 +24,12 @@ class Admin::ActionLog < ApplicationRecord
belongs_to :account belongs_to :account
belongs_to :target, polymorphic: true, optional: true belongs_to :target, polymorphic: true, optional: true
default_scope -> { order('id desc') }
before_validation :set_human_identifier before_validation :set_human_identifier
before_validation :set_route_param before_validation :set_route_param
before_validation :set_permalink before_validation :set_permalink
scope :latest, -> { order(id: :desc) }
def action def action
super.to_sym super.to_sym
end end

View File

@ -72,7 +72,7 @@ class Admin::ActionLogFilter
end end
def results def results
scope = Admin::ActionLog.includes(:target) scope = latest_action_logs.includes(:target)
params.each do |key, value| params.each do |key, value|
next if key.to_s == 'page' next if key.to_s == 'page'
@ -88,14 +88,18 @@ class Admin::ActionLogFilter
def scope_for(key, value) def scope_for(key, value)
case key case key
when 'action_type' when 'action_type'
Admin::ActionLog.where(ACTION_TYPE_MAP[value.to_sym]) latest_action_logs.where(ACTION_TYPE_MAP[value.to_sym])
when 'account_id' when 'account_id'
Admin::ActionLog.where(account_id: value) latest_action_logs.where(account_id: value)
when 'target_account_id' when 'target_account_id'
account = Account.find_or_initialize_by(id: value) account = Account.find_or_initialize_by(id: value)
Admin::ActionLog.where(target: [account, account.user].compact) latest_action_logs.where(target: [account, account.user].compact)
else else
raise Mastodon::InvalidParameterError, "Unknown filter: #{key}" raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
end end
end end
def latest_action_logs
Admin::ActionLog.latest
end
end end

View File

@ -131,25 +131,25 @@ class Report < ApplicationRecord
Admin::ActionLog.where( Admin::ActionLog.where(
target_type: 'Report', target_type: 'Report',
target_id: id target_id: id
).unscope(:order).arel, ).arel,
Admin::ActionLog.where( Admin::ActionLog.where(
target_type: 'Account', target_type: 'Account',
target_id: target_account_id target_id: target_account_id
).unscope(:order).arel, ).arel,
Admin::ActionLog.where( Admin::ActionLog.where(
target_type: 'Status', target_type: 'Status',
target_id: status_ids target_id: status_ids
).unscope(:order).arel, ).arel,
Admin::ActionLog.where( Admin::ActionLog.where(
target_type: 'AccountWarning', target_type: 'AccountWarning',
target_id: AccountWarning.where(report_id: id).select(:id) target_id: AccountWarning.where(report_id: id).select(:id)
).unscope(:order).arel, ).arel,
].reduce { |union, query| Arel::Nodes::UnionAll.new(union, query) } ].reduce { |union, query| Arel::Nodes::UnionAll.new(union, query) }
Admin::ActionLog.from(Arel::Nodes::As.new(subquery, Admin::ActionLog.arel_table)) Admin::ActionLog.latest.from(Arel::Nodes::As.new(subquery, Admin::ActionLog.arel_table))
end end
private private

View File

@ -1,6 +1,6 @@
# frozen_string_literal: true # frozen_string_literal: true
Fabricator('Admin::ActionLog') do Fabricator(:action_log, from: Admin::ActionLog) do
account { Fabricate.build(:account) } account { Fabricate.build(:account) }
action 'MyString' action 'MyString'
target nil target nil

View File

@ -110,9 +110,9 @@ describe Report do
let(:status) { Fabricate(:status) } let(:status) { Fabricate(:status) }
before do before do
Fabricate('Admin::ActionLog', target_type: 'Report', account_id: target_account.id, target_id: report.id, created_at: 2.days.ago) Fabricate(:action_log, target_type: 'Report', account_id: target_account.id, target_id: report.id, created_at: 2.days.ago)
Fabricate('Admin::ActionLog', target_type: 'Account', account_id: target_account.id, target_id: report.target_account_id, created_at: 2.days.ago) Fabricate(:action_log, target_type: 'Account', account_id: target_account.id, target_id: report.target_account_id, created_at: 2.days.ago)
Fabricate('Admin::ActionLog', target_type: 'Status', account_id: target_account.id, target_id: status.id, created_at: 2.days.ago) Fabricate(:action_log, target_type: 'Status', account_id: target_account.id, target_id: status.id, created_at: 2.days.ago)
end end
it 'returns right logs' do it 'returns right logs' do