Add base class for api/v1/timelines/* controllers (#27840)
		
	This commit is contained in:
		
					parent
					
						
							
								b2c5b20ef2
							
						
					
				
			
			
				commit
				
					
						7e1a77ea51
					
				
			
		
					 5 changed files with 52 additions and 80 deletions
				
			
		
							
								
								
									
										33
									
								
								app/controllers/api/v1/timelines/base_controller.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								app/controllers/api/v1/timelines/base_controller.rb
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,33 @@ | ||||||
|  | # frozen_string_literal: true | ||||||
|  | 
 | ||||||
|  | class Api::V1::Timelines::BaseController < Api::BaseController | ||||||
|  |   after_action :insert_pagination_headers, unless: -> { @statuses.empty? } | ||||||
|  | 
 | ||||||
|  |   private | ||||||
|  | 
 | ||||||
|  |   def insert_pagination_headers | ||||||
|  |     set_pagination_headers(next_path, prev_path) | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   def pagination_max_id | ||||||
|  |     @statuses.last.id | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   def pagination_since_id | ||||||
|  |     @statuses.first.id | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   def next_path_params | ||||||
|  |     permitted_params.merge(max_id: pagination_max_id) | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   def prev_path_params | ||||||
|  |     permitted_params.merge(min_id: pagination_since_id) | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   def permitted_params | ||||||
|  |     params | ||||||
|  |       .slice(*self.class::PERMITTED_PARAMS) | ||||||
|  |       .permit(*self.class::PERMITTED_PARAMS) | ||||||
|  |   end | ||||||
|  | end | ||||||
|  | @ -1,9 +1,10 @@ | ||||||
| # frozen_string_literal: true | # frozen_string_literal: true | ||||||
| 
 | 
 | ||||||
| class Api::V1::Timelines::HomeController < Api::BaseController | class Api::V1::Timelines::HomeController < Api::V1::Timelines::BaseController | ||||||
|   before_action -> { doorkeeper_authorize! :read, :'read:statuses' }, only: [:show] |   before_action -> { doorkeeper_authorize! :read, :'read:statuses' }, only: [:show] | ||||||
|   before_action :require_user!, only: [:show] |   before_action :require_user!, only: [:show] | ||||||
|   after_action :insert_pagination_headers, unless: -> { @statuses.empty? } | 
 | ||||||
|  |   PERMITTED_PARAMS = %i(local limit).freeze | ||||||
| 
 | 
 | ||||||
|   def show |   def show | ||||||
|     with_read_replica do |     with_read_replica do | ||||||
|  | @ -40,27 +41,11 @@ class Api::V1::Timelines::HomeController < Api::BaseController | ||||||
|     HomeFeed.new(current_account) |     HomeFeed.new(current_account) | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   def insert_pagination_headers |  | ||||||
|     set_pagination_headers(next_path, prev_path) |  | ||||||
|   end |  | ||||||
| 
 |  | ||||||
|   def pagination_params(core_params) |  | ||||||
|     params.slice(:local, :limit).permit(:local, :limit).merge(core_params) |  | ||||||
|   end |  | ||||||
| 
 |  | ||||||
|   def next_path |   def next_path | ||||||
|     api_v1_timelines_home_url pagination_params(max_id: pagination_max_id) |     api_v1_timelines_home_url next_path_params | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   def prev_path |   def prev_path | ||||||
|     api_v1_timelines_home_url pagination_params(min_id: pagination_since_id) |     api_v1_timelines_home_url prev_path_params | ||||||
|   end |  | ||||||
| 
 |  | ||||||
|   def pagination_max_id |  | ||||||
|     @statuses.last.id |  | ||||||
|   end |  | ||||||
| 
 |  | ||||||
|   def pagination_since_id |  | ||||||
|     @statuses.first.id |  | ||||||
|   end |   end | ||||||
| end | end | ||||||
|  |  | ||||||
|  | @ -1,12 +1,12 @@ | ||||||
| # frozen_string_literal: true | # frozen_string_literal: true | ||||||
| 
 | 
 | ||||||
| class Api::V1::Timelines::ListController < Api::BaseController | class Api::V1::Timelines::ListController < Api::V1::Timelines::BaseController | ||||||
|   before_action -> { doorkeeper_authorize! :read, :'read:lists' } |   before_action -> { doorkeeper_authorize! :read, :'read:lists' } | ||||||
|   before_action :require_user! |   before_action :require_user! | ||||||
|   before_action :set_list |   before_action :set_list | ||||||
|   before_action :set_statuses |   before_action :set_statuses | ||||||
| 
 | 
 | ||||||
|   after_action :insert_pagination_headers, unless: -> { @statuses.empty? } |   PERMITTED_PARAMS = %i(limit).freeze | ||||||
| 
 | 
 | ||||||
|   def show |   def show | ||||||
|     render json: @statuses, |     render json: @statuses, | ||||||
|  | @ -41,27 +41,11 @@ class Api::V1::Timelines::ListController < Api::BaseController | ||||||
|     ListFeed.new(@list) |     ListFeed.new(@list) | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   def insert_pagination_headers |  | ||||||
|     set_pagination_headers(next_path, prev_path) |  | ||||||
|   end |  | ||||||
| 
 |  | ||||||
|   def pagination_params(core_params) |  | ||||||
|     params.slice(:limit).permit(:limit).merge(core_params) |  | ||||||
|   end |  | ||||||
| 
 |  | ||||||
|   def next_path |   def next_path | ||||||
|     api_v1_timelines_list_url params[:id], pagination_params(max_id: pagination_max_id) |     api_v1_timelines_list_url params[:id], next_path_params | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   def prev_path |   def prev_path | ||||||
|     api_v1_timelines_list_url params[:id], pagination_params(min_id: pagination_since_id) |     api_v1_timelines_list_url params[:id], prev_path_params | ||||||
|   end |  | ||||||
| 
 |  | ||||||
|   def pagination_max_id |  | ||||||
|     @statuses.last.id |  | ||||||
|   end |  | ||||||
| 
 |  | ||||||
|   def pagination_since_id |  | ||||||
|     @statuses.first.id |  | ||||||
|   end |   end | ||||||
| end | end | ||||||
|  |  | ||||||
|  | @ -1,8 +1,9 @@ | ||||||
| # frozen_string_literal: true | # frozen_string_literal: true | ||||||
| 
 | 
 | ||||||
| class Api::V1::Timelines::PublicController < Api::BaseController | class Api::V1::Timelines::PublicController < Api::V1::Timelines::BaseController | ||||||
|   before_action :require_user!, only: [:show], if: :require_auth? |   before_action :require_user!, only: [:show], if: :require_auth? | ||||||
|   after_action :insert_pagination_headers, unless: -> { @statuses.empty? } | 
 | ||||||
|  |   PERMITTED_PARAMS = %i(local remote limit only_media).freeze | ||||||
| 
 | 
 | ||||||
|   def show |   def show | ||||||
|     cache_if_unauthenticated! |     cache_if_unauthenticated! | ||||||
|  | @ -42,27 +43,11 @@ class Api::V1::Timelines::PublicController < Api::BaseController | ||||||
|     ) |     ) | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   def insert_pagination_headers |  | ||||||
|     set_pagination_headers(next_path, prev_path) |  | ||||||
|   end |  | ||||||
| 
 |  | ||||||
|   def pagination_params(core_params) |  | ||||||
|     params.slice(:local, :remote, :limit, :only_media).permit(:local, :remote, :limit, :only_media).merge(core_params) |  | ||||||
|   end |  | ||||||
| 
 |  | ||||||
|   def next_path |   def next_path | ||||||
|     api_v1_timelines_public_url pagination_params(max_id: pagination_max_id) |     api_v1_timelines_public_url next_path_params | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   def prev_path |   def prev_path | ||||||
|     api_v1_timelines_public_url pagination_params(min_id: pagination_since_id) |     api_v1_timelines_public_url prev_path_params | ||||||
|   end |  | ||||||
| 
 |  | ||||||
|   def pagination_max_id |  | ||||||
|     @statuses.last.id |  | ||||||
|   end |  | ||||||
| 
 |  | ||||||
|   def pagination_since_id |  | ||||||
|     @statuses.first.id |  | ||||||
|   end |   end | ||||||
| end | end | ||||||
|  |  | ||||||
|  | @ -1,9 +1,10 @@ | ||||||
| # frozen_string_literal: true | # frozen_string_literal: true | ||||||
| 
 | 
 | ||||||
| class Api::V1::Timelines::TagController < Api::BaseController | class Api::V1::Timelines::TagController < Api::V1::Timelines::BaseController | ||||||
|   before_action -> { doorkeeper_authorize! :read, :'read:statuses' }, only: :show, if: :require_auth? |   before_action -> { doorkeeper_authorize! :read, :'read:statuses' }, only: :show, if: :require_auth? | ||||||
|   before_action :load_tag |   before_action :load_tag | ||||||
|   after_action :insert_pagination_headers, unless: -> { @statuses.empty? } | 
 | ||||||
|  |   PERMITTED_PARAMS = %i(local limit only_media).freeze | ||||||
| 
 | 
 | ||||||
|   def show |   def show | ||||||
|     cache_if_unauthenticated! |     cache_if_unauthenticated! | ||||||
|  | @ -51,27 +52,11 @@ class Api::V1::Timelines::TagController < Api::BaseController | ||||||
|     ) |     ) | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   def insert_pagination_headers |  | ||||||
|     set_pagination_headers(next_path, prev_path) |  | ||||||
|   end |  | ||||||
| 
 |  | ||||||
|   def pagination_params(core_params) |  | ||||||
|     params.slice(:local, :limit, :only_media).permit(:local, :limit, :only_media).merge(core_params) |  | ||||||
|   end |  | ||||||
| 
 |  | ||||||
|   def next_path |   def next_path | ||||||
|     api_v1_timelines_tag_url params[:id], pagination_params(max_id: pagination_max_id) |     api_v1_timelines_tag_url params[:id], next_path_params | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   def prev_path |   def prev_path | ||||||
|     api_v1_timelines_tag_url params[:id], pagination_params(min_id: pagination_since_id) |     api_v1_timelines_tag_url params[:id], prev_path_params | ||||||
|   end |  | ||||||
| 
 |  | ||||||
|   def pagination_max_id |  | ||||||
|     @statuses.last.id |  | ||||||
|   end |  | ||||||
| 
 |  | ||||||
|   def pagination_since_id |  | ||||||
|     @statuses.first.id |  | ||||||
|   end |   end | ||||||
| end | end | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue