private async static Task SetRepositoryScore(
     IActorStateManager stateManager, RepositoryScore repositoryScore)
 {
     await stateManager.SetStateAsync(
         RepositoryKey(repositoryScore.Repository),
         new CachedItem <RepositoryScore> {
         Data = repositoryScore
     });
 }
        private async static Task AddQueryToRepositoryScoreAsync(
            IActorStateManager stateManager, Repository repository, string query)
        {
            CachedItem <RepositoryScore> oldScore =
                await GetRepositoryScoreAsync(stateManager, repository);

            RepositoryScore newScore = oldScore != null?
                                       Serializer.DeepCopy(oldScore.Data) : new RepositoryScore();

            newScore.Repository = repository;
            if (!newScore.FoundInQueries.Contains(query))
            {
                newScore.FoundInQueries.Add(query);
            }

            await SetRepositoryScore(stateManager, newScore);
        }
        public static float Calculate(RepositoryScore repositoryScore)
        {
            float score = 0;

            if (repositoryScore.IsStarredByUser)
            {
                score += 100;
            }

            score += repositoryScore.FollowingForkersCount * FOLLOWING_FORKER_BOOST;
            score += repositoryScore.FollowingStargazersCount * FOLLOWING_STARGAZER_BOOST;
            score += repositoryScore.FollowingWatchersCount * FOLLOWING_WATCHER_BOOST;
            score += repositoryScore.LanguageOverlap * LANGUAGE_OVERLAP_BOOST;

            score += repositoryScore.Repository.StargazersCount * STARGAZER_BOOST;
            score += repositoryScore.Repository.WatchersCount * WATCHESR_BOOST;
            score += repositoryScore.Repository.ForksCount * FORK_BOOST;

            return(score);
        }
        private static RepositoryScore CreateRepositoryScore(
            RepositoryScore oldScore, Repository repository, UserInfo userInfo)
        {
            bool isStarredByUser = repository.Stargazers.Contains(userInfo.Login);

            int followingForkersCount =
                userInfo.Following.Intersect(repository.Forkers).Count();

            int followingStargazersCount =
                userInfo.Following.Intersect(repository.Stargazers).Count();

            List <string> foundInQueries = oldScore != null ?
                                           oldScore.FoundInQueries : new List <string>();

            return(new RepositoryScore
            {
                Repository = repository,
                IsStarredByUser = isStarredByUser,
                FollowingForkersCount = followingForkersCount,
                FollowingStargazersCount = followingStargazersCount,
                FoundInQueries = foundInQueries
            });
        }