Add trending statuses (#17431)
* Add trending statuses * Fix dangling items with stale scores in localized sets * Various fixes and improvements - Change approve_all/reject_all to approve_accounts/reject_accounts - Change Trends::Query methods to not mutate the original query - Change Trends::Query#skip to offset - Change follow recommendations to be refreshed in a transaction * Add tests for trending statuses filtering behaviour * Fix not applying filtering scope in controller
This commit is contained in:
		
					parent
					
						
							
								a29a982eaa
							
						
					
				
			
			
				commit
				
					
						27965ce5ed
					
				
			
		
					 71 changed files with 1074 additions and 307 deletions
				
			
		
							
								
								
									
										19
									
								
								app/controllers/api/v1/admin/trends/links_controller.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								app/controllers/api/v1/admin/trends/links_controller.rb
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,19 @@ | |||
| # frozen_string_literal: true | ||||
| 
 | ||||
| class Api::V1::Admin::Trends::LinksController < Api::BaseController | ||||
|   protect_from_forgery with: :exception | ||||
| 
 | ||||
|   before_action -> { authorize_if_got_token! :'admin:read' } | ||||
|   before_action :require_staff! | ||||
|   before_action :set_links | ||||
| 
 | ||||
|   def index | ||||
|     render json: @links, each_serializer: REST::Trends::LinkSerializer | ||||
|   end | ||||
| 
 | ||||
|   private | ||||
| 
 | ||||
|   def set_links | ||||
|     @links = Trends.links.query.limit(limit_param(10)) | ||||
|   end | ||||
| end | ||||
							
								
								
									
										19
									
								
								app/controllers/api/v1/admin/trends/statuses_controller.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								app/controllers/api/v1/admin/trends/statuses_controller.rb
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,19 @@ | |||
| # frozen_string_literal: true | ||||
| 
 | ||||
| class Api::V1::Admin::Trends::StatusesController < Api::BaseController | ||||
|   protect_from_forgery with: :exception | ||||
| 
 | ||||
|   before_action -> { authorize_if_got_token! :'admin:read' } | ||||
|   before_action :require_staff! | ||||
|   before_action :set_statuses | ||||
| 
 | ||||
|   def index | ||||
|     render json: @statuses, each_serializer: REST::StatusSerializer | ||||
|   end | ||||
| 
 | ||||
|   private | ||||
| 
 | ||||
|   def set_statuses | ||||
|     @statuses = cache_collection(Trends.statuses.query.limit(limit_param(DEFAULT_STATUSES_LIMIT)), Status) | ||||
|   end | ||||
| end | ||||
|  | @ -14,6 +14,6 @@ class Api::V1::Admin::Trends::TagsController < Api::BaseController | |||
|   private | ||||
| 
 | ||||
|   def set_tags | ||||
|     @tags = Trends.tags.get(false, limit_param(10)) | ||||
|     @tags = Trends.tags.query.limit(limit_param(10)) | ||||
|   end | ||||
| end | ||||
|  |  | |||
|  | @ -12,10 +12,14 @@ class Api::V1::Trends::LinksController < Api::BaseController | |||
|   def set_links | ||||
|     @links = begin | ||||
|       if Setting.trends | ||||
|         Trends.links.get(true, limit_param(10)) | ||||
|         links_from_trends | ||||
|       else | ||||
|         [] | ||||
|       end | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   def links_from_trends | ||||
|     Trends.links.query.allowed.in_locale(content_locale).limit(limit_param(10)) | ||||
|   end | ||||
| end | ||||
|  |  | |||
							
								
								
									
										27
									
								
								app/controllers/api/v1/trends/statuses_controller.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								app/controllers/api/v1/trends/statuses_controller.rb
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,27 @@ | |||
| # frozen_string_literal: true | ||||
| 
 | ||||
| class Api::V1::Trends::StatusesController < Api::BaseController | ||||
|   before_action :set_statuses | ||||
| 
 | ||||
|   def index | ||||
|     render json: @statuses, each_serializer: REST::StatusSerializer | ||||
|   end | ||||
| 
 | ||||
|   private | ||||
| 
 | ||||
|   def set_statuses | ||||
|     @statuses = begin | ||||
|       if Setting.trends | ||||
|         cache_collection(statuses_from_trends, Status) | ||||
|       else | ||||
|         [] | ||||
|       end | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   def statuses_from_trends | ||||
|     scope = Trends.statuses.query.allowed.in_locale(content_locale) | ||||
|     scope = scope.filtered_for(current_account) if user_signed_in? | ||||
|     scope.limit(limit_param(DEFAULT_STATUSES_LIMIT)) | ||||
|   end | ||||
| end | ||||
|  | @ -12,7 +12,7 @@ class Api::V1::Trends::TagsController < Api::BaseController | |||
|   def set_tags | ||||
|     @tags = begin | ||||
|       if Setting.trends | ||||
|         Trends.tags.get(true, limit_param(10)) | ||||
|         Trends.tags.query.allowed.limit(limit_param(10)) | ||||
|       else | ||||
|         [] | ||||
|       end | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue