Fix reblogged/favourited caching; add API endpoints for who favd/reblogged status
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]
|
||||
|
||||
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'
|
||||
|
|
|
@ -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
|
||||
|
|
Reference in New Issue