2023-12-19 05:59:43 -05:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
class AccountSuggestions::FriendsOfFriendsSource < AccountSuggestions::Source
|
2024-02-20 04:21:49 -05:00
|
|
|
def get(account, limit: DEFAULT_LIMIT)
|
2024-03-12 04:38:32 -04:00
|
|
|
source_query(account, limit: limit)
|
|
|
|
.map { |id, _frequency, _followers_count| [id, key] }
|
|
|
|
end
|
|
|
|
|
|
|
|
def source_query(account, limit: DEFAULT_LIMIT)
|
2024-03-04 01:35:20 -05:00
|
|
|
first_degree = account.following.where.not(hide_collections: true).select(:id).reorder(nil)
|
|
|
|
base_account_scope(account)
|
|
|
|
.joins(:account_stat)
|
2024-03-12 04:38:32 -04:00
|
|
|
.joins(:passive_relationships).where(passive_relationships: { account_id: first_degree })
|
2024-03-04 01:35:20 -05:00
|
|
|
.group('accounts.id, account_stats.id')
|
2024-03-12 04:38:32 -04:00
|
|
|
.reorder(frequency: :desc, followers_count: :desc)
|
2024-03-04 01:35:20 -05:00
|
|
|
.limit(limit)
|
2024-03-12 04:38:32 -04:00
|
|
|
.pluck(Arel.sql('accounts.id, COUNT(*) AS frequency, followers_count'))
|
2023-12-19 05:59:43 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
def key
|
|
|
|
:friends_of_friends
|
|
|
|
end
|
|
|
|
end
|