]> git.openstreetmap.org Git - rails.git/blob - app/controllers/feeds/changeset_comments_controller.rb
e24b353b89b1bcfb122b18c63946558619352978
[rails.git] / app / controllers / feeds / changeset_comments_controller.rb
1 module Feeds
2   class ChangesetCommentsController < ApplicationController
3     before_action :authorize_web
4     before_action :set_locale
5
6     authorize_resource
7
8     before_action -> { check_database_readable(:need_api => true) }
9     around_action :web_timeout
10
11     ##
12     # Get a feed of recent changeset comments
13     def index
14       if params[:id]
15         # Extract the arguments
16         id = params[:id].to_i
17
18         # Find the changeset
19         changeset = Changeset.find(id)
20
21         # Return comments for this changeset only
22         @comments = changeset.comments.includes(:author, :changeset).reverse_order.limit(comments_limit)
23       else
24         # Return comments
25         @comments = ChangesetComment.includes(:author, :changeset).where(:visible => true).order("created_at DESC").limit(comments_limit).preload(:changeset)
26       end
27
28       # Render the result
29       respond_to do |format|
30         format.rss
31       end
32     rescue OSM::APIBadUserInput
33       head :bad_request
34     end
35
36     private
37
38     ##
39     # Get the maximum number of comments to return
40     def comments_limit
41       if params[:limit]
42         if params[:limit].to_i.positive? && params[:limit].to_i <= 10000
43           params[:limit].to_i
44         else
45           raise OSM::APIBadUserInput, "Comments limit must be between 1 and 10000"
46         end
47       else
48         100
49       end
50     end
51   end
52 end