public async Task CompleteRelations(bool full) { HashSet <int> userIds = new HashSet <int>(_dbWorker.GetAllUsersIds()); //select people who have no out relations //var people = _analyzer.GetPeopleWithoutOutRelationsAndNotDeleted(); //get all people var people = _analyzer.GetPeopleWithoutOutRelations(); int count = 0; foreach (var person in people) { count++; Logger.Out("Completing: {0}. {1}/{2} done!", MessageType.Verbose, person.Id, count, people.Count()); var friends = new List <Person>(); try { friends = await _snWorker.GetFriends(person); } catch (Exception ex) { Logger.Out("Error getting friends for user {0}. Message: {1}", MessageType.Error, person.Id, ex.Message); } if (full) { AddAllRelations(friends, userIds, person); } else { Person mainUser = friends.FirstOrDefault(a => a.Id == _userId); if (mainUser != null) { try { _dbWorker.AddRelation(person, mainUser, EnterType.Friend); } catch (Exception ex) { Logger.Out("Error adding relation: {0} --> {1}. Message: {2}", MessageType.Error, person.Id, mainUser.Id, ex.Message); } } } } }
private async Task AddPotentialFriendsRecursive(Person user, EnterType type, List <Person> potentialFriends, DumpingDepth depth, Dictionary <int, Person> trace) { foreach (var pFriend in potentialFriends) { if (!_dbcache.CheckAddPersonId(pFriend.Id)) { _neo4JWorker.AddPerson(pFriend); } _neo4JWorker.AddRelation(user, pFriend, type); await CollectPotentialFriendsRecursive(pFriend, depth, trace); } }