public async Task <PagedList <RecommendDTO> > GetUserRecommendations(RecommendationsParams recommendationsParams)
        {
            var users           = _context.Users.OrderBy(u => u.UserName).AsQueryable();
            var recommendations = _context.Recommendations.AsQueryable();

            if (recommendationsParams.Predicate == "recommended")
            {
                recommendations = recommendations.Where(recommend => recommend.SourceUserId == recommendationsParams.UserId);
                users           = recommendations.Select(recommend => recommend.RecommendedUser);
            }

            if (recommendationsParams.Predicate == "recommendedBy")
            {
                recommendations = recommendations.Where(recommend => recommend.RecommendedUserId == recommendationsParams.UserId);
                users           = recommendations.Select(recommend => recommend.SourceUser); //list of users that have recommended the currently logged in user
            }
            var RecommendedUsers = users.Select(user => new RecommendDTO {
                Username     = user.UserName,
                Nickname     = user.Nickname,
                Age          = user.Birthday.CalculateAge(),
                PhotoUrl     = user.Photos.FirstOrDefault(p => p.IsMain).Url,
                InterestedIn = user.InterestedIn,
                Id           = user.Id
            });

            return(await PagedList <RecommendDTO> .CreateAsync(RecommendedUsers,
                                                               recommendationsParams.PageNumber, recommendationsParams.PageSize));
        }
Example #2
0
        public async Task <ActionResult <IEnumerable <RecommendDTO> > > GetUserRecommendations([FromQuery] RecommendationsParams recommendationsParams)
        {
            recommendationsParams.UserId = User.GetUserId();
            var users = await _recommendationsRepository.GetUserRecommendations(recommendationsParams);

            Response.AddPaginationHeader(users.CurrentPage, users.PageSize,
                                         users.TotalCount, users.TotalPages);

            return(Ok(users));
        }