commit: e0a197650a30bec9dae26d714168700bc9ce93ed
parent: c913bdfc98baab25a78866d5d2b0f0c33e017afa
Author: Eugen Rochko <eugen@zeonfederated.com>
Date: Sat, 29 Oct 2016 01:29:19 +0200
Adding common followers API, fixing fallback query again
Diffstat:
9 files changed, 23 insertions(+), 13 deletions(-)
diff --git a/app/controllers/api/v1/accounts_controller.rb b/app/controllers/api/v1/accounts_controller.rb
@@ -14,15 +14,23 @@ class Api::V1::AccountsController < ApiController
end
def following
- @following = @account.following
+ @accounts = @account.following
+ render action: :index
end
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
def suggestions
@accounts = FollowSuggestion.get(current_user.account_id)
+ render action: :index
end
def statuses
diff --git a/app/models/account.rb b/app/models/account.rb
@@ -122,6 +122,15 @@ class Account < ApplicationRecord
username
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)
find_remote!(username, nil)
end
diff --git a/app/models/follow_suggestion.rb b/app/models/follow_suggestion.rb
@@ -36,11 +36,7 @@ END
neo = Neography::Rest.new
query = <<END
-OPTIONAL MATCH (a {account_id: {id}})
-WITH a
MATCH (b)
-WHERE b <> a
-AND NOT (a)-[:follows]->(b)
RETURN b.account_id
ORDER BY b.nodeRank DESC
LIMIT {limit}
diff --git a/app/views/api/v1/accounts/followers.rabl b/app/views/api/v1/accounts/followers.rabl
@@ -1,2 +0,0 @@
-collection @followers
-extends('api/v1/accounts/show')
diff --git a/app/views/api/v1/accounts/following.rabl b/app/views/api/v1/accounts/following.rabl
@@ -1,2 +0,0 @@
-collection @following
-extends('api/v1/accounts/show')
diff --git a/app/views/api/v1/accounts/index.rabl b/app/views/api/v1/accounts/index.rabl
@@ -0,0 +1,2 @@
+collection @accounts
+extends 'api/v1/accounts/show'
diff --git a/app/views/api/v1/accounts/statuses.rabl b/app/views/api/v1/accounts/statuses.rabl
@@ -1,2 +1,2 @@
collection @statuses
-extends('api/v1/statuses/show')
+extends 'api/v1/statuses/show'
diff --git a/app/views/api/v1/accounts/suggestions.rabl b/app/views/api/v1/accounts/suggestions.rabl
@@ -1,2 +0,0 @@
-collection @accounts
-extends('api/v1/accounts/show')
diff --git a/config/routes.rb b/config/routes.rb
@@ -82,6 +82,7 @@ Rails.application.routes.draw do
get :statuses
get :followers
get :following
+ get :common_followers
post :follow
post :unfollow