예제 #1
0
        /// <summary>
        /// Finds 5 followers per username per run. I.e: if runs is set to 1 finds 5 users that follow the initial username.
        /// If runs is set to 2, finds 5 users that follow the inital username and then 5 users that follow each of those users' usernames.
        /// </summary>
        /// <param name="username"> username that all followers stem from </param>
        /// <param name="runs"> One-indexed value for how deep the runs go (max 3 required by project) </param>
        /// <returns> A list of users that follow the username, sometimes indirectly (following followers of the username) </returns>
        public async Task <IEnumerable <User> > FindFollowersByUsername(string username, int runs)
        {
            var followers      = new List <User>();
            var loginsToSearch = new List <string> {
                username
            };                                                  // initalize with the given githubId

            for (int i = 0; i < runs; i++)
            {
                var followersFound = new List <User>();

                foreach (var login in loginsToSearch)
                {
                    followersFound.AddRange(await _api.FindFiveFollowersByUsername(login));
                }

                followers.AddRange(followersFound);

                loginsToSearch = followersFound.Select(x => x.Login).ToList();
            }

            return(followers);
        }