diff options
author | Eugen Rochko <eugen@zeonfederated.com> | 2016-10-15 12:38:28 +0200 |
---|---|---|
committer | Eugen Rochko <eugen@zeonfederated.com> | 2016-10-15 12:38:28 +0200 |
commit | 70ab6624f5f397ddd05136db2fa37c902f0867eb (patch) | |
tree | 72407fd4b5368d3e8cdfd4c85ae928a654d8d261 /app/models | |
parent | 91144d46ecc1a6e2d39abe8bea2d62c5cb57aca3 (diff) | |
parent | 4d336ceface783c255e62220cfa76812630ff1a1 (diff) |
Merge branch 'feature-suggestions' into development
Diffstat (limited to 'app/models')
-rw-r--r-- | app/models/follow.rb | 28 | ||||
-rw-r--r-- | app/models/follow_suggestion.rb | 10 |
2 files changed, 38 insertions, 0 deletions
diff --git a/app/models/follow.rb b/app/models/follow.rb index 4f47580e1..656b28d35 100644 --- a/app/models/follow.rb +++ b/app/models/follow.rb @@ -22,4 +22,32 @@ class Follow < ApplicationRecord def title destroyed? ? "#{account.acct} is no longer following #{target_account.acct}" : "#{account.acct} started following #{target_account.acct}" end + + after_create :add_to_graph + after_destroy :remove_from_graph + + def sync! + add_to_graph + end + + private + + def add_to_graph + neo = Neography::Rest.new + + a = neo.create_unique_node('account_index', 'Account', account_id.to_s, account_id: account_id) + b = neo.create_unique_node('account_index', 'Account', target_account_id.to_s, account_id: target_account_id) + + neo.create_unique_relationship('follow_index', 'Follow', id.to_s, 'follows', a, b) + rescue Neography::NeographyError, Excon::Error::Socket => e + Rails.logger.error e + end + + def remove_from_graph + neo = Neography::Rest.new + rel = neo.get_relationship_index('follow_index', 'Follow', id.to_s) + neo.delete_relationship(rel) + rescue Neography::NeographyError, Excon::Error::Socket => e + Rails.logger.error e + end end diff --git a/app/models/follow_suggestion.rb b/app/models/follow_suggestion.rb new file mode 100644 index 000000000..f4515700a --- /dev/null +++ b/app/models/follow_suggestion.rb @@ -0,0 +1,10 @@ +class FollowSuggestion + def self.get(for_account_id) + neo = Neography::Rest.new + account_ids = neo.execute_query('START a=node:account_index(Account={id}) MATCH (a)-[:follows]->(b)-[:follows]->(c) WHERE a <> c AND NOT (a)-[:follows]->(c) RETURN DISTINCT c.account_id', id: for_account_id) + Account.where(id: account_ids['data'].first) unless account_ids.empty? + rescue Neography::NeographyError, Excon::Error::Socket => e + Rails.logger.error e + [] + end +end |