public async Task <PagedList <User> > GetUsers(PagenationParams pagenationParams) { // IQueryable<User> users = _context.Users.Include(x => x.Photos); var users = _context.Users.Include(x => x.Photos).OrderByDescending(u => u.LastActive).AsQueryable(); users = users.Where(u => u.Id != pagenationParams.UserId) .Where(u => u.Gender == pagenationParams.Gender); // Filter by Likers if (pagenationParams.likers) { var userLikers = await GetUserLikes(pagenationParams.UserId, pagenationParams.likers); users = users.Where(u => userLikers.Contains(u.Id)); } // Filter by Likees if (pagenationParams.likees) { var userLikees = await GetUserLikes(pagenationParams.UserId, pagenationParams.likers); users = users.Where(u => userLikees.Contains(u.Id)); } // Filter by age if (pagenationParams.MinAge != 18 || pagenationParams.MaxAge != 99) { // convert maxAge && minAge to DateTime var minDate = DateTime.Today.AddYears(-pagenationParams.MaxAge - 1); var maxDate = DateTime.Today.AddYears(-pagenationParams.MinAge); users = users.Where(u => u.DateOfBirth >= minDate && u.DateOfBirth <= maxDate); } // FilterBy LastActive or Created if (!string.IsNullOrEmpty(pagenationParams.OrederBy)) { switch (pagenationParams.OrederBy) { case "created": users = users.OrderByDescending(u => u.Created); break; default: users = users.OrderByDescending(u => u.LastActive); break; } } return(await PagedList <User> .CreateAsync(users, pagenationParams.PageNumber, pagenationParams.PageSize)); }
public async Task <IActionResult> GetUsers([FromQuery] PagenationParams pagenationParams) { var userId = int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value); var userFromRepo = await _repo.GetUser(userId); pagenationParams.UserId = userId; if (string.IsNullOrEmpty(pagenationParams.Gender)) { pagenationParams.Gender = userFromRepo.Gender == "رجل" ? "إمرأة" : "رجل"; } var users = await _repo.GetUsers(pagenationParams); Response.AddApplicationPagenation(users.CurrentPage, users.PageSize, users.TotalCount, users.TotlePages); var UsersToReturn = _mapper.Map <IEnumerable <UserForListDto> >(users); return(Ok(UsersToReturn)); }