From: Anton Khorev Date: Mon, 20 Nov 2023 09:44:02 +0000 (+0300) Subject: Add changeset comment query limit settings; use common query limit in changeset comme... X-Git-Tag: live~127^2~4 X-Git-Url: https://git.openstreetmap.org./rails.git/commitdiff_plain/989b110bfc804e2c681b12523f20940af205680d?ds=sidebyside Add changeset comment query limit settings; use common query limit in changeset comment feeds --- diff --git a/app/controllers/changeset_comments/feeds_controller.rb b/app/controllers/changeset_comments/feeds_controller.rb index fef48bb18..148873eea 100644 --- a/app/controllers/changeset_comments/feeds_controller.rb +++ b/app/controllers/changeset_comments/feeds_controller.rb @@ -1,5 +1,7 @@ module ChangesetComments class FeedsController < ApplicationController + include QueryMethods + before_action :authorize_web before_action :set_locale @@ -19,10 +21,13 @@ module ChangesetComments changeset = Changeset.find(changeset_id) # Return comments for this changeset only - @comments = changeset.comments.includes(:author, :changeset).reverse_order.limit(comments_limit) + @comments = changeset.comments.includes(:author, :changeset).reverse_order + @comments = query_limit(@comments) else # Return comments - @comments = ChangesetComment.includes(:author, :changeset).where(:visible => true).order("created_at DESC").limit(comments_limit).preload(:changeset) + @comments = ChangesetComment.includes(:author, :changeset).where(:visible => true).order("created_at DESC") + @comments = query_limit(@comments) + @comments = @comments.preload(:changeset) end # Render the result @@ -32,21 +37,5 @@ module ChangesetComments rescue OSM::APIBadUserInput head :bad_request end - - private - - ## - # Get the maximum number of comments to return - def comments_limit - if params[:limit] - if params[:limit].to_i.positive? && params[:limit].to_i <= 10000 - params[:limit].to_i - else - raise OSM::APIBadUserInput, "Comments limit must be between 1 and 10000" - end - else - 100 - end - end end end diff --git a/app/controllers/concerns/query_methods.rb b/app/controllers/concerns/query_methods.rb index 2d0bfee53..2656eb4af 100644 --- a/app/controllers/concerns/query_methods.rb +++ b/app/controllers/concerns/query_methods.rb @@ -12,8 +12,9 @@ module QueryMethods ## # Get query limit value from request parameters and settings def query_limit_value - max_limit = Settings["max_#{controller_name.singularize}_query_limit"] - default_limit = Settings["default_#{controller_name.singularize}_query_limit"] + name = controller_path.sub(%r{^api/}, "").tr("/", "_").singularize + max_limit = Settings["max_#{name}_query_limit"] + default_limit = Settings["default_#{name}_query_limit"] if params[:limit] if params[:limit].to_i.positive? && params[:limit].to_i <= max_limit params[:limit].to_i diff --git a/config/settings.yml b/config/settings.yml index 2e0346f00..33b5bfb32 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -35,6 +35,10 @@ tracepoints_per_page: 5000 default_changeset_query_limit: 100 # Maximum limit on the number of changesets returned by the changeset query api method max_changeset_query_limit: 100 +# Default limit on the number of changeset comments in feeds +default_changeset_comments_feed_query_limit: 100 +# Maximum limit on the number of changesets comments in feeds +max_changeset_comments_feed_query_limit: 10000 # Maximum number of nodes that will be returned by the api in a map request max_number_of_nodes: 50000 # Maximum number of nodes that can be in a way (checked on save)