예제 #1
0
        public async Task<PagedList<AppUser>> GetUsers(RequestQueryUserParams userParams)
        {
            var users = _context.Users
                .Where(u => u.Id != userParams.UserId);

            if (!string.IsNullOrEmpty(userParams.Gender))
            {
                users = users.Where(u => u.Gender == userParams.Gender);
            }

            if (userParams.Likers || userParams.Likees)
            {
                var currentUser = await GetCurrentUser();
                users = users.Where(u => currentUser
                    .GetUserLikesExt(userParams.Likers)
                    .Contains(u.Id));
                // .Select(x => )
            }

            if (userParams.MinAge != 18 || userParams.MaxAge != 99)
            {
                var minDateOfBirth = DateTime.Today.AddYears(-userParams.MaxAge - 1);
                var maxDateOfBirth = DateTime.Today.AddYears(-userParams.MinAge);
                users = users.Where(u => u.DateOfBirth >= minDateOfBirth && u.DateOfBirth <= maxDateOfBirth);
            }

            if (!string.IsNullOrEmpty(userParams.OrderBy))
            {
                switch (userParams.OrderBy)
                {
                    case "created":
                        users = users.OrderByDescending(u => u.Created);
                        break;
                    case "lastActive":
                        users = users.OrderByDescending(u => u.LastActive);
                        break;
                    default:
                        break;
                }
            }

            return await PagedList<AppUser>
                .CreateAsync(users, userParams.PageNumber, userParams.PageSize);
        }
        public async Task <IActionResult> GetUsers([FromQuery] RequestQueryUserParams userParams)
        {
            var currentUser = await _usersRepository.GetCurrentUser();

            if (currentUser == null)
            {
                return(Unauthorized());
            }

            userParams.UserId = currentUser.Id;

            var users = await _usersRepository.GetUsers(userParams);

            if (users == null)
            {
                return(BadRequest());
            }

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

            Response.AddPagination(users.CurrentPage, users.PageSize, users.TotalCount, users.TotalPages);

            return(Ok(usersToReturn));
        }