diff --git a/app/controllers/api/v1/accounts_controller.rb b/app/controllers/api/v1/accounts_controller.rb index bb3e54a89b..a74d6f979e 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 8eba4da79f..2e1f7a4488 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 15f3b61564..ee76d4b6ad 100644 --- a/app/models/follow_suggestion.rb +++ b/app/models/follow_suggestion.rb @@ -36,11 +36,7 @@ END neo = Neography::Rest.new query = < 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 c54b0487e0..0000000000 --- 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 87b454ffad..0000000000 --- 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 0000000000..9f3b13a53d --- /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 0a0ed13c5b..44d29d91ba 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 f4dc121ea5..0000000000 --- a/app/views/api/v1/accounts/suggestions.rabl +++ /dev/null @@ -1,2 +0,0 @@ -collection @accounts -extends('api/v1/accounts/show') diff --git a/config/routes.rb b/config/routes.rb index b5abd56af7..7ffb40339f 100644 --- 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