Esempio n. 1
0
        public async Task <PagedList <User> > GetUsers(ParamsUser param)
        {
            //get the users, & include their photos
            var users = _context.Users.Include(p => p.Photos)
                        //orderby the last active date, desc, as as to show from most recent
                        .OrderByDescending(u => u.LastActive).AsQueryable();

            //get all users without adding the current logged in user among the lis
            users = users.Where(u => u.Id != param.UserId);

            //also get based on opposite gender
            users = users.Where(u => u.Gender == param.Gender);


            if (param.Likers)
            {
                var userLikers = await GetUserLikes(param.UserId, param.Likers);

                users = users.Where(u => userLikers.Contains(u.Id));
            }
            if (param.Likees)
            {
                var userLikees = await GetUserLikes(param.UserId, param.Likers);

                users = users.Where(u => userLikees.Contains(u.Id));
            }


            //check if MinAge Or MaxAge Params where passed
            if (param.MinAge != 18 || param.MaxAge != 99)
            {
                //get the Min Date Of Birth by adding the years of max to today exp (-99 - 1)
                var minDob = DateTime.Today.AddYears(-param.MaxAge - 1);
                //get the Max Date Of Birth by adding the years of min to today exp (-18 - 1)
                var maxDob = DateTime.Today.AddYears(-param.MinAge);

                //get users where DOB greater than minDob && lesser or equall MaxDob
                users = users.Where(u => u.DateOfBirth >= minDob && u.DateOfBirth <= maxDob);
            }

            //check if an orderBy was specified
            if (!string.IsNullOrEmpty(param.OrderBy))
            {
                //switch the orderBy parameter specified
                switch (param.OrderBy)
                {
                case "created":
                    users = users.OrderByDescending(u => u.Created);
                    break;

                default:
                    users = users.OrderByDescending(u => u.LastActive);
                    break;
                }
            }


            //get the queried page list
            return(await PagedList <User> .QueryAsync(users, param.PageNumber, param.PageSize));
        }
Esempio n. 2
0
        public async Task <IActionResult> GetUsers([FromQuery] ParamsUser param)
        {
            //get the logged in user ID
            var currentUserId = int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value);
            //get single user
            var userFromRepo = await _repo.GetUser(currentUserId, true);

            //set the param User Id
            param.UserId = currentUserId;

            //check if gender was set
            if (string.IsNullOrEmpty(param.Gender))
            {
                //check if the logged in user is a male and display for him female, vise visa
                param.Gender = userFromRepo.Gender == "male" ? "female" : "male";
            }

            //get the users based on the parameters
            var usersPg = await _repo.GetUsers(param);

            //retured the Dto'ed class list
            var mappedUser = _mapper.Map <IEnumerable <UserForListDto> >(usersPg);


            //add to the response header, the pagination details, using our Response extension method
            Response.AddPagination(usersPg.CurrentPage, usersPg.PageSize,
                                   usersPg.TotalCount, usersPg.TotalPages);

            return(Ok(mappedUser));
        }