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)); }
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)); }