Adding common followers API, fixing fallback query again
This commit is contained in:
parent
c913bdfc98
commit
e0a197650a
|
@ -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')
|
|
2
app/views/api/v1/accounts/index.rabl
Normal file
2
app/views/api/v1/accounts/index.rabl
Normal file
|
@ -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
|
||||||
|
|
Reference in a new issue