public async Task <IEnumerable <AppUser> > GetUsersAsync(UserFilterParams userFilterParams) { var query = _context.Users .Include(c => c.Country) .AsQueryable(); query = query.Where(u => u.UserName != userFilterParams.CurrentUsername); if (userFilterParams.Gender != "Male or female") { query = query.Where(u => u.Gender == userFilterParams.Gender); } if (!string.IsNullOrEmpty(userFilterParams.FirstName)) { query = query.Where(u => u.FirstName.Contains(userFilterParams.FirstName)); } if (!string.IsNullOrEmpty(userFilterParams.LastName)) { query = query.Where(u => u.LastName.Contains(userFilterParams.LastName)); } if (userFilterParams.Country != "All countries") { query = query.Where(u => u.Country.CountryName == userFilterParams.Country); } return(await query.ToListAsync()); }
public static Expression <Func <TEntity, bool> > CreateFilter <TEntity>( UserFilterParams filterParams ) where TEntity : class, IUser { Type entityType = typeof(TEntity); var parameter = Expression.Parameter(entityType, "user"); var property = Expression.Property(parameter, entityType.GetProperty(filterParams.FilterOption.ToString())); var toLowerCall = Expression.Call(property, toLowerMeth); var containsCall = Expression.Call(toLowerCall, containsMeth, Expression.Constant(filterParams.FilterValue, typeof(string))); return(Expression.Lambda <Func <TEntity, bool> >(containsCall, parameter)); }
public async IAsyncEnumerable <TView> GetFiltered( [FromQuery] UserFilterParams filterParams ) { var filter = DynamicExpressions.CreateFilter <TOtherEntity>(filterParams); var users = uw.Repository <TOtherEntity>().GetAllAsync(filterParams.FetchLength, filter); await foreach (var user in users) { yield return(mapper.Map <TView>(user)); } }
public async Task <PagedList <User> > GetUsers(UserFilterParams userFilterParams) { var users = _context.Users.Include(u => u.Photos).OrderByDescending(u => u.LastActive).AsQueryable(); //Filter Section users = users.Where(u => u.Id != userFilterParams.UserId); if (userFilterParams.Liker) { var userLikers = await GetUserLike(userFilterParams.UserId, userFilterParams.Liker); users = users.Where(u => userLikers.Contains(u.Id)); return(await PagedList <User> .CreateAsync(users, userFilterParams.PageNumber, userFilterParams.PageSize)); } if (userFilterParams.Likee) { var userLikees = await GetUserLike(userFilterParams.UserId, userFilterParams.Liker); users = users.Where(u => userLikees.Contains(u.Id)); return(await PagedList <User> .CreateAsync(users, userFilterParams.PageNumber, userFilterParams.PageSize)); } users = users.Where(u => u.Gender == userFilterParams.Gender); if (userFilterParams.MinAge != 18 || userFilterParams.MaxAge != 99) { var minDob = DateTime.Today.AddYears(-userFilterParams.MaxAge - 1); var maxDob = DateTime.Today.AddYears(-userFilterParams.MinAge); users = users.Where(u => u.DateOfBirth >= minDob && u.DateOfBirth <= maxDob); } if (!string.IsNullOrEmpty(userFilterParams.OrderBy)) { switch (userFilterParams.OrderBy) { case "dateOfBirth": users = users.OrderByDescending(u => u.DateOfBirth); break; default: users = users.OrderByDescending(u => u.LastActive); break; } } return(await PagedList <User> .CreateAsync(users, userFilterParams.PageNumber, userFilterParams.PageSize)); }
public async Task <IActionResult> Index(string country, string lastName, string firstName, string gender, int page = 1) { var countries = await _unitOfWork.CountryRepository.GetAllCountriesAsync(); countries.Insert(0, new Country { CountryName = "All countries" }); SelectList selectList = new SelectList(countries, "CountryName", "CountryName"); ViewBag.Countries = selectList; ViewBag.CurrentUsername = User.Identity.Name; var userFilterParams = new UserFilterParams { Country = string.IsNullOrEmpty(country) ? "All countries" : country, Gender = string.IsNullOrEmpty(gender) ? "Male or female" : gender, CurrentUsername = User.Identity.Name, FirstName = firstName, LastName = lastName }; var users = await _unitOfWork.UserRepository.GetUsersAsync(userFilterParams); int pageSize = 10; var count = users.Count(); var items = users.Skip((page - 1) * pageSize).Take(pageSize).ToList(); PageViewModel pageViewModel = new PageViewModel(count, page, pageSize); PaginatedUsersViewModel viewModel = new PaginatedUsersViewModel() { PageViewModel = pageViewModel, Users = items, Country = country, Gender = gender, CurrentUsername = User.Identity.Name, FirstName = firstName, LastName = lastName }; return(View(viewModel)); }
public async virtual Task <IActionResult> GetUsers([FromQuery] UserFilterParams userFilterParams) { var currentUserId = int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value); var userItem = await _datingAppRepository.GetUser(currentUserId); userFilterParams.UserId = userItem.Id; if (string.IsNullOrEmpty(userFilterParams.Gender)) { userFilterParams.Gender = userItem.Gender == "male" ? "female" : "male"; } var users = await _datingAppRepository.GetUsers(userFilterParams); //Use automapper case var userToReturn = _mapper.Map <IEnumerable <UserForList> >(users); Response.AddPagination(users.CurrentPage, users.PageSize, users.TotalPages, users.TotalCount); return(Ok(userToReturn)); }