Adding common followers API, fixing fallback query again

th-downstream
Eugen Rochko 8 years ago
parent 2917bca72b
commit 38cacac4b0

@ -14,15 +14,23 @@ class Api::V1::AccountsController < ApiController
end end
def following def following
@following = @account.following @accounts = @account.following
render action: :index
end end
def followers def followers
@followers = @account.followers @accounts = @account.followers
render action: :index
end
def common_followers
@accounts = @account.common_followers_with(current_user.account)
render action: :index
end end
def suggestions def suggestions
@accounts = FollowSuggestion.get(current_user.account_id) @accounts = FollowSuggestion.get(current_user.account_id)
render action: :index
end end
def statuses def statuses

@ -122,6 +122,15 @@ class Account < ApplicationRecord
username username
end end
def common_followers_with(other_account)
results = Neography::Rest.new.execute_query('MATCH (a {account_id: {a_id}})-[:follows]->(b)-[:follows]->(c {account_id: {c_id}}) RETURN b.account_id', a_id: id, c_id: other_account.id)
ids = results['data'].map(&:first)
accounts = self.where(id: ids).with_counters.map { |a| [a.id, a] }.to_h
ids.map { |id| accounts[id] }.compact
rescue Neography::NeographyError, Excon::Error::Socket
[]
end
def self.find_local!(username) def self.find_local!(username)
find_remote!(username, nil) find_remote!(username, nil)
end end

@ -36,11 +36,7 @@ END
neo = Neography::Rest.new neo = Neography::Rest.new
query = <<END query = <<END
OPTIONAL MATCH (a {account_id: {id}})
WITH a
MATCH (b) MATCH (b)
WHERE b <> a
AND NOT (a)-[:follows]->(b)
RETURN b.account_id RETURN b.account_id
ORDER BY b.nodeRank DESC ORDER BY b.nodeRank DESC
LIMIT {limit} LIMIT {limit}

@ -1,2 +0,0 @@
collection @followers
extends('api/v1/accounts/show')

@ -1,2 +0,0 @@
collection @following
extends('api/v1/accounts/show')

@ -0,0 +1,2 @@
collection @accounts
extends 'api/v1/accounts/show'

@ -1,2 +1,2 @@
collection @statuses collection @statuses
extends('api/v1/statuses/show') extends 'api/v1/statuses/show'

@ -1,2 +0,0 @@
collection @accounts
extends('api/v1/accounts/show')

@ -82,6 +82,7 @@ Rails.application.routes.draw do
get :statuses get :statuses
get :followers get :followers
get :following get :following
get :common_followers
post :follow post :follow
post :unfollow post :unfollow

Loading…
Cancel
Save