Declare api node ways as nested resources

This commit is contained in:
Anton Khorev 2025-02-02 13:11:03 +03:00
parent e206dd527e
commit 6a50a5e871
10 changed files with 113 additions and 66 deletions

View file

@ -15,8 +15,7 @@ class ApiAbility
can [:read, :download], Changeset
can :read, Tracepoint
can :read, User
can :read, Node
can [:read, :ways_for_node], Way
can :read, [Node, Way]
can [:read, :relations_for_node, :relations_for_way, :relations_for_relation], Relation
can [:history, :read], [OldNode, OldWay, OldRelation]
can :read, UserBlock

View file

@ -0,0 +1,25 @@
module Api
module Nodes
class WaysController < ApiController
authorize_resource
before_action :set_request_formats
##
# returns all the ways which are currently using the node given in the
# :node_id parameter. note that this used to return deleted ways as well, but
# this seemed not to be the expected behaviour, so it was removed.
def index
way_ids = WayNode.where(:node_id => params[:node_id]).collect { |ws| ws.id[0] }.uniq
@ways = Way.where(:id => way_ids, :visible => true)
# Render the result
respond_to do |format|
format.xml
format.json
end
end
end
end
end

View file

@ -80,21 +80,5 @@ module Api
head :bad_request
end
end
##
# returns all the ways which are currently using the node given in the
# :id parameter. note that this used to return deleted ways as well, but
# this seemed not to be the expected behaviour, so it was removed.
def ways_for_node
wayids = WayNode.where(:node_id => params[:id]).collect { |ws| ws.id[0] }.uniq
@ways = Way.where(:id => wayids, :visible => true)
# Render the result
respond_to do |format|
format.xml
format.json
end
end
end
end

View file

@ -0,0 +1,5 @@
json.partial! "api/root_attributes"
json.elements do
json.array! @ways, :partial => "api/ways/way", :as => :way
end

View file

@ -0,0 +1,5 @@
xml.instruct!
xml.osm(OSM::API.new.xml_root_attributes) do |osm|
osm << (render(:partial => "api/ways/way", :collection => @ways) || "")
end

View file

@ -1,5 +0,0 @@
json.partial! "api/root_attributes"
json.elements do
json.array! @ways, :partial => "way", :as => :way
end

View file

@ -1,5 +0,0 @@
xml.instruct!
xml.osm(OSM::API.new.xml_root_attributes) do |osm|
osm << (render(@ways) || "")
end