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)); }