Open char0n opened 4 years ago
The only workaround so far I could come up with is not using nested resources, but rather define urls in router statically and use defdelegate to keep backward compatibility with nested resources if utilized again in the future:
# router.ex
resources "/video-channels", VideoChannelController, only: [:show]
get "/video-channels/:video_channel_id/videos", VideoController, :index_by_video_channel
resources "/videos", VideoController, only: [:index]
# VideoController.ex
def VideoController do
use HelloWeb, :controller
use PhoenixSwagger
defdelegate index_by_video_channel(conn, params),
to: VideoController,
as: :index
swagger_path :index_by_video_channel do
get("/api/v1/video-channels/{video_channel_id}/videos")
description("Returns videos filtered by video channel.")
end
def index(conn, %{"video_channel_id" => video_channel_id} = params}) do
..list of videos filtered by video channel ID..
end
swagger_path :index do
get("/api/v1/videos")
description("Returns videos filtered by video channel.")
end
def index(conn, params) do
..list of videos...
end
end
Hi,
I've intercepted a problem that I couldn't find solution to. It concerns nested phoenix resources and documenting them with swagger macros.
It is possible to define nested resources in your router.
By route definition like this I end up with having two
index
functions insideVideoController
that are pattern matching different params.Then during the compilation I get:
The problem is that both
swagger_path
s are using the same action:index
, although they handle completely different urls. Is this scenario supported? If it's not supported, is there some recommended workaround for nested resources then ?Thank you