Пример #1
0
        public async Task <IActionResult> GetUsers([FromQuery] UsersListPagingParams usersListPagingParams)
        {
            var userId = int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value);

            usersListPagingParams.UserId = userId;
            var userFromRepo = await _repo.GetUser(userId);

            if (string.IsNullOrEmpty(usersListPagingParams.Gender))
            {
                usersListPagingParams.Gender = (userFromRepo.Gender == "female") ? "male" : "female";
            }
            var users = await _repo.GetUsers(usersListPagingParams);

            var userDTOs = _mapper.Map <IEnumerable <UserForListDTO> >(users);

            Response.AddPaginationHeader(users.CurrentPage, users.PageSize, users.TotalCount, users.TotalPages);
            return(Ok(userDTOs));
        }
Пример #2
0
        public async Task <PagedList <User> > GetUsers(UsersListPagingParams usersListPagingParams)
        {
            var minDoB = System.DateTime.Today.AddYears(-usersListPagingParams.MaxAge);
            var maxDob = System.DateTime.Today.AddYears(-usersListPagingParams.MinAge);

            var users = _context.Users
                        .Include(p => p.Photos)
                        .Include(c => c.Country)
                        .Where((u) => u.Id != usersListPagingParams.UserId &&
                               u.Gender == usersListPagingParams.Gender &&
                               u.DateOfBirth >= minDoB &&
                               u.DateOfBirth <= maxDob);

            if (usersListPagingParams.Bring == Bring.LIKERS)
            {
                var likersIds = _context.Likes
                                .Where((l) => l.LikeeId == usersListPagingParams.UserId)
                                .Select((l) => l.LikerId);
                users = users.Where((u) => likersIds.Contains(u.Id));
            }
            else if (usersListPagingParams.Bring == Bring.LIKEES)
            {
                var likeesIds = _context.Likes
                                .Where((l) => l.LikerId == usersListPagingParams.UserId)
                                .Select((l) => l.LikeeId);
                users = users.Where((u) => likeesIds.Contains(u.Id));
            }

            switch (usersListPagingParams.OrderBy)
            {
            case OrderBy.ACTIVE:
                users = users.OrderByDescending((u) => u.LastActive);
                break;

            case OrderBy.CREATED:
                users = users.OrderByDescending((u) => u.Created);
                break;
            }
            return(await PagedList <User> .CreateAsync(users, usersListPagingParams.PageNumber, usersListPagingParams.PageSize));
        }