Exemple #1
0
        public async Task <UsersListDto> ListUsersAsync(int pageIndex, int itemsPage, string search)
        {
            var filterPaginatedEspecification = new UserFilterPaginatedSpecification(itemsPage * pageIndex, itemsPage, search);
            var filterSpecification           = new UserFilterSpecification(search);

            var itemsOnPage = await _userRepository.ListAsync(filterPaginatedEspecification);

            var totalItems = await _userRepository.CountAsync(filterSpecification);

            var users = new UsersListDto()
            {
                Users = itemsOnPage.Select(s => s.MapUserDto()).ToList(),

                PaginationInfo = new PaginationInfoDto()
                {
                    ActualPage   = pageIndex,
                    ItemsPerPage = itemsOnPage.Count,
                    TotalItems   = totalItems,
                    TotalPages   = int.Parse(Math.Ceiling(((decimal)totalItems / itemsPage)).ToString())
                }
            };

            users.PaginationInfo.Next     = (users.PaginationInfo.ActualPage == users.PaginationInfo.TotalPages - 1) ? "is-disabled" : "";
            users.PaginationInfo.Previous = (users.PaginationInfo.ActualPage == 0) ? "is-disabled" : "";

            return(users);
        }
Exemple #2
0
        public async Task <IPagedResult <User> > ListAsync(int pageIndex, int pageSize)
        {
            var filterSpecification          = new UserFilterSpecification();
            var filterPaginatedSpecification = new UserFilterPaginatedSpecification(pageIndex * pageSize, pageSize);

            var items = await _userRepository.ListAsync(filterPaginatedSpecification);

            var totalItems = await _userRepository.CountAsync(filterSpecification);

            return(new PagedResult <User>(pageIndex, pageSize, totalItems, items));
        }
Exemple #3
0
        public async Task <IActionResult> GetUsers([FromQuery] UserParams userParams)
        {
            var currentUserId = int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value);

            var userFromRepo = await _userRepository.GetByIdAsync(currentUserId);


            userParams.UserId = currentUserId;

            // Filter the user by gender
            var genderFilter         = userParams.Gender ?? (userFromRepo.Gender == "male" ? "female" :  "male");
            var minDateOfBirthFilter = DateTime.Today.AddYears(-99 - 1);;
            var maxDateOfBirthFilter = DateTime.Today.AddYears(-18);;

            if (userParams.minAge != 18 || userParams.maxAge != 99)
            {
                minDateOfBirthFilter = DateTime.Today.AddYears(-userParams.maxAge - 1);
                maxDateOfBirthFilter = DateTime.Today.AddYears(-userParams.minAge);
            }

            IEnumerable <int> userLikers = null;
            IEnumerable <int> userLikees = null;

            if (userParams.Likers)
            {
                userLikers = await _userRepository.GetUserLikes(userParams.UserId, userParams.Likers);
            }

            if (userParams.Likees)
            {
                userLikees = await _userRepository.GetUserLikes(userParams.UserId, userParams.Likers);
            }

            var userFilterSpecification = new UserFilterSpecification(
                includePhotos: true,
                gender: genderFilter,
                excludeUserId: userFromRepo.Id,
                minDateOfBirth: minDateOfBirthFilter,
                maxDateOfBirth: maxDateOfBirthFilter,
                userLikers: userLikers,
                userLikees: userLikees
                );

            var userFilterPaginatedSpecification = new UserFilterPaginatedSpecification(
                userParams.TotalResultsToSkipForPagination,
                userParams.PageSize,
                includePhotos: true,
                gender: genderFilter,
                excludeUserId: userFromRepo.Id,
                minDateOfBirth: minDateOfBirthFilter,
                maxDateOfBirth: maxDateOfBirthFilter,
                userLikers: userLikers,
                userLikees: userLikees
                );
            // ----------------  Filter applied  -----------------

            var users = await _userRepository.ListAsync(userFilterPaginatedSpecification);

            var totalUsers = _userRepository.Count(userFilterSpecification);

            var usersToReturn = _mapper.Map <IEnumerable <UserForListDto> >(users);

            Response.AddPagination(userParams.PageNumber, userParams.PageSize, totalUsers, userParams.TotalPages(totalUsers));

            return(Ok(usersToReturn));
        }