Fix quote serializer (#34510)
This commit is contained in:
parent
e097f0e9eb
commit
dee744c793
3 changed files with 34 additions and 8 deletions
|
@ -7,14 +7,24 @@ class StatusRelationshipsPresenter
|
||||||
:bookmarks_map, :filters_map, :attributes_map
|
:bookmarks_map, :filters_map, :attributes_map
|
||||||
|
|
||||||
def initialize(statuses, current_account_id = nil, **options)
|
def initialize(statuses, current_account_id = nil, **options)
|
||||||
|
@current_account_id = current_account_id
|
||||||
|
|
||||||
|
# Keeping a reference to @statuses is ok since `StatusRelationshipsPresenter`
|
||||||
|
# basically never outlives the statuses collection it is passed
|
||||||
|
@statuses = statuses
|
||||||
|
|
||||||
if current_account_id.nil?
|
if current_account_id.nil?
|
||||||
@reblogs_map = {}
|
@preloaded_account_relations = {}
|
||||||
@favourites_map = {}
|
@filters_map = {}
|
||||||
@bookmarks_map = {}
|
@reblogs_map = {}
|
||||||
@mutes_map = {}
|
@favourites_map = {}
|
||||||
@pins_map = {}
|
@bookmarks_map = {}
|
||||||
@filters_map = {}
|
@mutes_map = {}
|
||||||
|
@pins_map = {}
|
||||||
|
@attributes_map = {}
|
||||||
else
|
else
|
||||||
|
@preloaded_account_relations = nil
|
||||||
|
|
||||||
statuses = statuses.compact
|
statuses = statuses.compact
|
||||||
status_ids = statuses.flat_map { |s| [s.id, s.reblog_of_id, s.proper.quote&.quoted_status_id] }.uniq.compact
|
status_ids = statuses.flat_map { |s| [s.id, s.reblog_of_id, s.proper.quote&.quoted_status_id] }.uniq.compact
|
||||||
conversation_ids = statuses.flat_map { |s| [s.proper.conversation_id, s.proper.quote&.quoted_status&.conversation_id] }.uniq.compact
|
conversation_ids = statuses.flat_map { |s| [s.proper.conversation_id, s.proper.quote&.quoted_status&.conversation_id] }.uniq.compact
|
||||||
|
@ -30,6 +40,17 @@ class StatusRelationshipsPresenter
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# This one is currently on-demand as it is only used for quote posts
|
||||||
|
def preloaded_account_relations
|
||||||
|
@preloaded_account_relations ||= begin
|
||||||
|
accounts = @statuses.compact.flat_map { |s| [s.account, s.proper.account, s.proper.quote&.quoted_account] }.uniq.compact
|
||||||
|
|
||||||
|
account_ids = accounts.pluck(:id)
|
||||||
|
account_domains = accounts.pluck(:domain).uniq
|
||||||
|
Account.find(@current_account_id).relations_map(account_ids, account_domains)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def build_filters_map(statuses, current_account_id)
|
def build_filters_map(statuses, current_account_id)
|
||||||
|
|
|
@ -20,6 +20,6 @@ class REST::BaseQuoteSerializer < ActiveModel::Serializer
|
||||||
private
|
private
|
||||||
|
|
||||||
def status_filter
|
def status_filter
|
||||||
@status_filter ||= StatusFilter.new(object.quoted_status, current_user&.account, instance_options[:relationships] || {})
|
@status_filter ||= StatusFilter.new(object.quoted_status, current_user&.account, instance_options[:relationships]&.preloaded_account_relations || {})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -26,8 +26,13 @@ RSpec.describe 'Home', :inline_jobs do
|
||||||
before do
|
before do
|
||||||
user.account.follow!(bob)
|
user.account.follow!(bob)
|
||||||
user.account.follow!(ana)
|
user.account.follow!(ana)
|
||||||
PostStatusService.new.call(bob, text: 'New toot from bob.')
|
quoted = PostStatusService.new.call(bob, text: 'New toot from bob.')
|
||||||
PostStatusService.new.call(tim, text: 'New toot from tim.')
|
PostStatusService.new.call(tim, text: 'New toot from tim.')
|
||||||
|
reblogged = PostStatusService.new.call(tim, text: 'New toot from tim, which will end up boosted.')
|
||||||
|
ReblogService.new.call(bob, reblogged)
|
||||||
|
# TODO: use PostStatusService argument when available rather than manually creating quote
|
||||||
|
quoting = PostStatusService.new.call(bob, text: 'Self-quote from bob.')
|
||||||
|
Quote.create!(status: quoting, quoted_status: quoted, state: :accepted)
|
||||||
PostStatusService.new.call(ana, text: 'New toot from ana.')
|
PostStatusService.new.call(ana, text: 'New toot from ana.')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue