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