docbrown/app/controllers/api/v0/podcast_episodes_controller.rb
rhymes 5444c53df2 Improve API podcast episodes controller caching and fetching (#5772) [deploy]
* Refactor caching and add some tests

* Only select needed columns

* Add more tests
2020-01-27 16:57:37 -05:00

32 lines
919 B
Ruby

module Api
module V0
class PodcastEpisodesController < ApiController
respond_to :json
before_action :cors_preflight_check
after_action :cors_set_access_control_headers
before_action :set_cache_control_headers, only: %i[index]
def index
page = params[:page]
per_page = (params[:per_page] || 30).to_i
num = [per_page, 1000].min
if params[:username]
podcast = Podcast.available.find_by!(slug: params[:username])
relation = podcast.podcast_episodes.reachable
else
relation = PodcastEpisode.includes(:podcast).reachable
end
@podcast_episodes = relation.
select(:id, :slug, :title, :podcast_id).
order(published_at: :desc).
page(page).per(num)
set_surrogate_key_header PodcastEpisode.table_key, @podcast_episodes.map(&:record_key)
end
end
end
end