Beispiel #1
0
        public async Task <RecommendedUsers> GetRecommendedUsers(GetRecommendedUsers user)
        {
            Logger.LogInformation($"{nameof(FriendsService)}.{nameof(GetRecommendedUsers)}.Start");
            var vkFriends = await GetFriendsFromVk(user.UserId);

            // var fbFriends = GetFriendsFromFb(user.UserId);

            //await Task.WhenAll(vkFriends, fbFriends);
            //vkFriends.AddRange();
            var friendsFromNetwroks = vkFriends.Distinct();
            var socialFriends       =
                await SocialDb.RecommendedPeople.GetRecommendedFromUsersId(friendsFromNetwroks);

            // return new BadResponseResult("Something goes wrong with social friends.");

            var partOffset = user.PageParams.Offset;
            var partCount  = user.PageParams.Count;

            var followers = await SocialDb.RecommendedPeople.GetRecommendedFromFollowers(user.UserId, partOffset, partCount);

            // return new BadResponseResult("Something goes wrong with followers.");
            var followings = await SocialDb.RecommendedPeople.GetRecommendedFromFollowings(user.UserId, partOffset, partCount);

            //return new BadResponseResult("Something goes wrong with follows as you ))) .");

            //Parallel.ForEach(followers, x => { x.CommonFollowingsCount = (int)(x.CommonFollowingsCount * 1.5); });

            var recommended = new List <(RecommendedType Type, RecommendedFollowingQuery list)>(followers.Count + followings.Count);

            recommended.AddRange(followers.Select(x => (RecommendedType.Follower, x)));
            recommended.AddRange(followings.Select(x => (RecommendedType.Following, x)));

            recommended = recommended.OrderByDescending(x =>
            {
                if (x.Type == RecommendedType.Follower)
                {
                    return(x.list.CommonFollowingsCount * 1.5);
                }
                return(x.list.CommonFollowingsCount);
            }).Skip(user.PageParams.Offset).Take(user.PageParams.Count).ToList();

            MakeFollowersAndFollowsTo(recommended, out var followersOut, out var followingsOut);



            var result = new RecommendedUsers
            {
                SocialFriends = MakeSocialNetFriends(socialFriends, 100),

                Followers  = followersOut,
                Followings = followingsOut
            };

            Logger.LogInformation($"{nameof(FriendsService)}.{nameof(GetRecommendedUsers)}.End");
            return(result);
        }
        public async Task <IActionResult> GetRecommendedUsers([FromBody] GetRecommendedUsers user)

        {
            if (!ModelState.IsValid)
            {
                return(new BadResponseResult(ModelState));
            }

            var result = await _friendsService.GetRecommendedUsers(user);

            return(new OkResponseResult(result));
        }