Fix reblogged/favourited caching; add API endpoints for who favd/reblogged status
This commit is contained in:
		
							parent
							
								
									c003e70758
								
							
						
					
					
						commit
						e4671adc25
					
				| @ -2,18 +2,28 @@ class Api::V1::StatusesController < ApiController | ||||
|   before_action -> { doorkeeper_authorize! :read }, except: [:create, :destroy, :reblog, :unreblog, :favourite, :unfavourite] | ||||
|   before_action -> { doorkeeper_authorize! :write }, only:  [:create, :destroy, :reblog, :unreblog, :favourite, :unfavourite] | ||||
| 
 | ||||
|   respond_to    :json | ||||
|   before_action :set_status, only: [:show, :context, :reblogged_by, :favourited_by] | ||||
| 
 | ||||
|   respond_to :json | ||||
| 
 | ||||
|   def show | ||||
|     @status = Status.find(params[:id]) | ||||
|   end | ||||
| 
 | ||||
|   def context | ||||
|     @status  = Status.find(params[:id]) | ||||
|     @context = OpenStruct.new({ ancestors: @status.ancestors, descendants: @status.descendants }) | ||||
|     set_maps([@status] + @context[:ancestors] + @context[:descendants]) | ||||
|   end | ||||
| 
 | ||||
|   def reblogged_by | ||||
|     @accounts = @status.reblogs.includes(:account).limit(40).map(&:account) | ||||
|     render action: :accounts | ||||
|   end | ||||
| 
 | ||||
|   def favourited_by | ||||
|     @accounts = @status.favourites.includes(:account).limit(40).map(&:account) | ||||
|     render action: :accounts | ||||
|   end | ||||
| 
 | ||||
|   def create | ||||
|     @status = PostStatusService.new.call(current_user.account, params[:status], params[:in_reply_to_id].blank? ? nil : Status.find(params[:in_reply_to_id]), params[:media_ids]) | ||||
|     render action: :show | ||||
| @ -63,4 +73,10 @@ class Api::V1::StatusesController < ApiController | ||||
|     set_maps(@statuses) | ||||
|     render action: :index | ||||
|   end | ||||
| 
 | ||||
|   private | ||||
| 
 | ||||
|   def set_status | ||||
|     @status = Status.find(params[:id]) | ||||
|   end | ||||
| end | ||||
|  | ||||
| @ -1,3 +1,4 @@ | ||||
| cache | ||||
| attributes :id, :created_at, :in_reply_to_id | ||||
| 
 | ||||
| node(:uri)              { |status| TagManager.instance.uri_for(status) } | ||||
| @ -5,8 +6,6 @@ node(:content)          { |status| Formatter.instance.format(status) } | ||||
| node(:url)              { |status| TagManager.instance.url_for(status) } | ||||
| node(:reblogs_count)    { |status| status.reblogs_count } | ||||
| node(:favourites_count) { |status| status.favourites_count } | ||||
| node(:favourited, if: proc { !current_account.nil? }) { |status| defined?(@favourites_map) ? !!@favourites_map[status.id] : current_account.favourited?(status) } | ||||
| node(:reblogged,  if: proc { !current_account.nil? }) { |status| defined?(@reblogs_map)    ? !!@reblogs_map[status.id]    : current_account.reblogged?(status) } | ||||
| 
 | ||||
| child :account do | ||||
|   extends 'api/v1/accounts/show' | ||||
|  | ||||
							
								
								
									
										2
									
								
								app/views/api/v1/statuses/accounts.rabl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								app/views/api/v1/statuses/accounts.rabl
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,2 @@ | ||||
| collection @accounts | ||||
| extends 'api/v1/accounts/show' | ||||
| @ -1,8 +1,13 @@ | ||||
| object @status | ||||
| cache | ||||
| 
 | ||||
| extends 'api/v1/statuses/_show' | ||||
| 
 | ||||
| node(:favourited, if: proc { !current_account.nil? }) { |status| defined?(@favourites_map) ? !!@favourites_map[status.id] : current_account.favourited?(status) } | ||||
| node(:reblogged,  if: proc { !current_account.nil? }) { |status| defined?(@reblogs_map)    ? !!@reblogs_map[status.id]    : current_account.reblogged?(status) } | ||||
| 
 | ||||
| child :reblog => :reblog do | ||||
|   extends 'api/v1/statuses/_show' | ||||
| 
 | ||||
|   node(:favourited, if: proc { !current_account.nil? }) { |status| defined?(@favourites_map) ? !!@favourites_map[status.id] : current_account.favourited?(status) } | ||||
|   node(:reblogged,  if: proc { !current_account.nil? }) { |status| defined?(@reblogs_map)    ? !!@reblogs_map[status.id]    : current_account.reblogged?(status) } | ||||
| end | ||||
|  | ||||
| @ -59,6 +59,8 @@ Rails.application.routes.draw do | ||||
| 
 | ||||
|         member do | ||||
|           get :context | ||||
|           get :reblogged_by | ||||
|           get :favourited_by | ||||
| 
 | ||||
|           post :reblog | ||||
|           post :unreblog | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user