コード例 #1
0
        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());
        }
コード例 #2
0
        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));
        }
コード例 #3
0
        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));
            }
        }
コード例 #4
0
        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));
        }
コード例 #5
0
        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));
        }
コード例 #6
0
        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));
        }