Preserve old API interface

This commit is contained in:
Emelia Smith 2025-10-14 22:09:16 +02:00
parent 6aad732fc5
commit 891faa5d74
No known key found for this signature in database
3 changed files with 29 additions and 15 deletions

View File

@ -18,9 +18,6 @@ class Api::V1::Admin::ReportsController < Api::BaseController
def index def index
authorize :report, :index? authorize :report, :index?
return redirect_to api_v1_admin_reports_path(reports_filter.updated_filter) if reports_filter.outdated?
render json: @reports, each_serializer: REST::Admin::ReportSerializer render json: @reports, each_serializer: REST::Admin::ReportSerializer
end end
@ -74,12 +71,8 @@ class Api::V1::Admin::ReportsController < Api::BaseController
@report = Report.find(params[:id]) @report = Report.find(params[:id])
end end
def reports_filter
@reports_filter ||= ReportFilter.new(filter_params)
end
def filtered_reports def filtered_reports
reports_filter.results ReportFilter.new(filter_params).results
end end
def report_params def report_params
@ -87,7 +80,16 @@ class Api::V1::Admin::ReportsController < Api::BaseController
end end
def filter_params def filter_params
params.slice(*ReportFilter::ALL_KEYS).permit(*ReportFilter::ALL_KEYS) filter_params = params.slice(*ReportFilter::API_KEYS).permit(*ReportFilter::API_KEYS)
resolved = filter_params.delete(:resolved)
if resolved.present?
filter_params[:status] = ActiveModel::Type::Boolean.new.cast(resolved) ? 'resolved' : 'unresolved'
elsif filter_params[:status].nil?
filter_params[:status] = 'unresolved'
end
filter_params
end end
def next_path def next_path

View File

@ -6,16 +6,23 @@ class ReportFilter
search_type search_type
search_term search_term
target_origin target_origin
account_id
target_account_id
).freeze ).freeze
OUTDATED_KEYS = %i( OUTDATED_ADMIN_KEYS = %i(
resolved resolved
by_target_domain by_target_domain
account_id account_id
target_account_id target_account_id
).freeze ).freeze
ALL_KEYS = KEYS + OUTDATED_KEYS ALL_KEYS = KEYS + OUTDATED_ADMIN_KEYS
API_KEYS = KEYS + %i(
resolved
account_id
target_account_id
).freeze
SEARCH_TYPES = %w( SEARCH_TYPES = %w(
source source
@ -41,7 +48,7 @@ class ReportFilter
# We always need a status parameter: # We always need a status parameter:
return true if @params.exclude? :status return true if @params.exclude? :status
OUTDATED_KEYS.any? { |key, _value| @params.include? key } OUTDATED_ADMIN_KEYS.any? { |key, _value| @params.include? key }
end end
def updated_filter def updated_filter
@ -174,6 +181,10 @@ class ReportFilter
case key.to_sym case key.to_sym
when :target_origin when :target_origin
target_origin_scope(value) target_origin_scope(value)
when :target_account_id
Report.where(target_account_id: value)
when :account_id
Report.where(account_id: value)
else else
raise Mastodon::InvalidParameterError, "Unknown filter: #{key}" raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
end end

View File

@ -73,11 +73,12 @@ RSpec.describe 'Reports' do
context 'with outdated resolved param' do context 'with outdated resolved param' do
let(:params) { { resolved: true } } let(:params) { { resolved: true } }
let(:scope) { Report.resolved }
it 'redirects to the new filter path' do it 'returns the resolved reports' do
subject subject
expect(response).to redirect_to api_v1_admin_reports_url({ status: 'resolved' }) expect(response.parsed_body).to match_array(expected_response)
end end
end end
@ -99,7 +100,7 @@ RSpec.describe 'Reports' do
it 'returns only the resolved reports' do it 'returns only the resolved reports' do
subject subject
expect(body_as_json).to match_array(expected_response) expect(response.parsed_body).to match_array(expected_response)
end end
end end