about summary refs log tree commit diff
path: root/app
diff options
context:
space:
mode:
authorEugen Rochko <eugen@zeonfederated.com>2016-10-29 01:29:19 +0200
committerEugen Rochko <eugen@zeonfederated.com>2016-10-29 01:29:19 +0200
commite0a197650a30bec9dae26d714168700bc9ce93ed (patch)
tree5f590c5b2f393734be7aea5e19c1ecaa8c85857f /app
parentc913bdfc98baab25a78866d5d2b0f0c33e017afa (diff)
Adding common followers API, fixing fallback query again
Diffstat (limited to 'app')
-rw-r--r--app/controllers/api/v1/accounts_controller.rb12
-rw-r--r--app/models/account.rb9
-rw-r--r--app/models/follow_suggestion.rb4
-rw-r--r--app/views/api/v1/accounts/followers.rabl2
-rw-r--r--app/views/api/v1/accounts/following.rabl2
-rw-r--r--app/views/api/v1/accounts/index.rabl2
-rw-r--r--app/views/api/v1/accounts/statuses.rabl2
-rw-r--r--app/views/api/v1/accounts/suggestions.rabl2
8 files changed, 22 insertions, 13 deletions
diff --git a/app/controllers/api/v1/accounts_controller.rb b/app/controllers/api/v1/accounts_controller.rb
index bb3e54a89..a74d6f979 100644
--- 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
index 8eba4da79..2e1f7a448 100644
--- 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
index 15f3b6156..ee76d4b6a 100644
--- 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
deleted file mode 100644
index c54b0487e..000000000
--- a/app/views/api/v1/accounts/followers.rabl
+++ /dev/null
@@ -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
deleted file mode 100644
index 87b454ffa..000000000
--- a/app/views/api/v1/accounts/following.rabl
+++ /dev/null
@@ -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
new file mode 100644
index 000000000..9f3b13a53
--- /dev/null
+++ 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
index 0a0ed13c5..44d29d91b 100644
--- 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
deleted file mode 100644
index f4dc121ea..000000000
--- a/app/views/api/v1/accounts/suggestions.rabl
+++ /dev/null
@@ -1,2 +0,0 @@
-collection @accounts
-extends('api/v1/accounts/show')