private string CreateUserResourceUri(UsersParams usersParam, UriTypeEnum uriType) { switch (uriType) { case UriTypeEnum.PreviousPage: return(Url.Link("GetUsers", new { pageNumber = usersParam.PageNumber - 1, pageSize = usersParam.PageSize })); case UriTypeEnum.NextPage: return(Url.Link("GetUsers", new { pageNumber = usersParam.PageNumber + 1, pageSize = usersParam.PageSize })); case UriTypeEnum.Current: default: return(Url.Link("GetUsers", new { pageNumber = usersParam.PageNumber, pageSize = usersParam.PageSize })); } }
private IEnumerable <LinkDto> CreateUsersLinks(UsersParams usersParams, bool hasPrevious, bool hasNext) { var links = new List <LinkDto>(); links.Add( new LinkDto(CreateUserResourceUri(usersParams, UriTypeEnum.Current), "self", "GET")); if (hasNext) { links.Add( new LinkDto(CreateUserResourceUri(usersParams, UriTypeEnum.NextPage), "nextPage", "GET") ); } if (hasPrevious) { links.Add( new LinkDto(CreateUserResourceUri(usersParams, UriTypeEnum.PreviousPage), "previousPage", "GET") ); } return(links); }
public async Task <IActionResult> GetUsers([FromQuery] UsersParams usersParams) { var currentUserId = int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value); var userFromRepo = await _repo.GetOtherUser(currentUserId); usersParams.UserId = currentUserId; if (string.IsNullOrEmpty(usersParams.Gender)) { if (userFromRepo.Gender == "male") { usersParams.Gender = "female"; } if (userFromRepo.Gender == "female") { usersParams.Gender = "male"; } if (userFromRepo.Gender == "other") { usersParams.Gender = "other"; } } var users = await _repo.GetUsers(usersParams); var usersToReturn = _mapper.Map <IEnumerable <UserForListDTO> >(users); Response.AddPagination(users.CurrentPage, users.PageSize, users.TotalCount, users.TotalPages); return(Ok(usersToReturn)); }
public async Task <PagedList <User> > GetUsers(UsersParams usersParams) { var users = _context.Users.Include(p => p.Photos).OrderByDescending(u => u.LastActive).AsQueryable(); users = users.Where(u => u.Id != usersParams.UserId); users = users.Where(u => u.Gender == usersParams.Gender); if (usersParams.MinAge != 18 || usersParams.MaxAge != 99) { var minDob = DateTime.Today.AddYears(-usersParams.MaxAge - 1); var maxDob = DateTime.Today.AddYears(-usersParams.MinAge); users = users.Where(u => u.DateOfBirth >= minDob && u.DateOfBirth <= maxDob); } if (!string.IsNullOrEmpty(usersParams.OrderBy)) { switch (usersParams.OrderBy) { case "created": users = users.OrderByDescending(u => u.Created); break; default: users = users.OrderByDescending(u => u.LastActive); break; } } return(await PagedList <User> .CreateAsync(users, usersParams.PageNumber, usersParams.PageSize)); }
public async Task <PagedList <User> > GetUsersAsync(UsersParams usersParams) { var collection = await _userRepository.GetUsersAsync(); var pagedList = PagedList <User> .Create(collection, usersParams.PageNumber, usersParams.PageSize); return(pagedList); }
public async Task <IActionResult> GetUsersAsync([FromQuery] UsersParams usersParams, [FromHeader(Name = "Accept")] string mediaType) { if (!MediaTypeHeaderValue.TryParse(mediaType, out MediaTypeHeaderValue parsedMediaType)) { return(BadRequest()); } PagedList <User> users = await _userService.GetUsersAsync(usersParams); if (users == null) { return(NotFound()); } var previousPageLink = users.HasPrevious ? CreateUserResourceUri(usersParams, UriTypeEnum.PreviousPage) : null; var nextPageLink = users.HasNext ? CreateUserResourceUri(usersParams, UriTypeEnum.NextPage) : null; var paginationMetaData = new { totalCount = users.TotalCount, pageSize = users.PageSize, currentPage = users.CurrentPage, totalPages = users.TotalPages, previousPageLink, nextPageLink }; var paginationMetaDataJson = JsonSerializer.Serialize(paginationMetaData); Response.Headers.Add("X-Pagination", paginationMetaDataJson); var includeLinks = parsedMediaType.SubTypeWithoutSuffix.EndsWith("hateoas", StringComparison.InvariantCultureIgnoreCase); if (includeLinks) { var usersWithLinks = new List <ResponseUserLinksDto>(); foreach (var item in users) { IEnumerable <LinkDto> links = new List <LinkDto>(); links = CreateUserLinks(item.Id); var userWithLinks = _mapper.Map <ResponseUserLinksDto>(item); userWithLinks.Links = links; usersWithLinks.Add(userWithLinks); } var envelopeWithLinks = new EnvelopeResponseUserLinksDto(); envelopeWithLinks.Value = usersWithLinks; envelopeWithLinks.Links = CreateUsersLinks(usersParams, users.HasPrevious, users.HasNext); return(Ok(envelopeWithLinks)); } var responseDtos = _mapper.Map <IEnumerable <ResponseUserDto> >(users); return(Ok(responseDtos)); }
public async Task <PagedList <User> > GetUsers(UsersParams usersParams) { var users = _context.Users.Include(p => p.Photos).OrderByDescending(u => u.LastActive).AsQueryable(); //For Excluding the current user who has logged in users = users.Where(u => u.Id != usersParams.UserId); // For only a particular Gender (Means what we have decided from the controller) users = users.Where(users => users.Gender == usersParams.Gender); // Added the filters for Like User Ids if (usersParams.Likers) { var userLikers = await GetUserLikes(usersParams.UserId, usersParams.Likers); users = users.Where(u => userLikers.Contains(u.Id)); } if (usersParams.Likees) { var userLikees = await GetUserLikes(usersParams.UserId, usersParams.Likers); users = users.Where(u => userLikees.Contains(u.Id)); } if (usersParams.MinAge != 18 || usersParams.MaxAge != 99) { // minDOB--- min DOB user is looking for // maxDob -- Max Dob , user is looking for var minDob = DateTime.Today.AddYears(-usersParams.MaxAge - 1); var maxDob = DateTime.Today.AddYears(-usersParams.MinAge); users = users.Where(user => user.DateOfBirth >= minDob && user.DateOfBirth <= maxDob); } if (!string.IsNullOrEmpty(usersParams.OrderBy)) { switch (usersParams.OrderBy) { case "created": users = users.OrderByDescending(u => u.CreatedAt); break; default: users = users.OrderByDescending(u => u.LastActive); break; } } return(await PagedList <User> .CreateAsync(users, usersParams.PageNumber, usersParams.PageSize)); }
public async Task <ActionResult <IEnumerable <MemberDto> > > GetUsers([FromQuery] UsersParams usersParams) { var user = await _userRepository.GetUserByUsernameAsync(User.GetUsername()); usersParams.CurrentUsername = user.UserName; if (string.IsNullOrEmpty(usersParams.Gender)) { usersParams.Gender = user.Gender == "male" ? "female" : "male"; } var users = await _userRepository.GetMembersAsync(usersParams); Response.AddPaginationHeader(users.CurrentPage, users.PageSize, users.TotalPages, users.TotalCount); return(Ok(users)); }
public async Task <PagedList <MemberDto> > GetMembersAsync(UsersParams usersParams) { //return await _context.Users.ProjectTo<MemberDto>(_mapper.ConfigurationProvider).ToListAsync(); var query = _context.Users.AsNoTracking().AsQueryable(); query = query.Where(u => u.UserName != usersParams.CurrentUsername); query = query.Where(u => u.Gender == usersParams.Gender); var minDob = DateTime.Today.AddYears(-usersParams.MaxAge); var maxDob = DateTime.Today.AddYears(-usersParams.MinAge); query = query.Where(u => u.DateOfBirth.Year >= minDob.Year && u.DateOfBirth.Year <= maxDob.Year); query = usersParams.OrderBy switch { "created" => query.OrderByDescending(u => u.Created), _ => query.OrderByDescending(u => u.LastActive), }; return(await PagedList <MemberDto> .CreateAsync( query.ProjectTo <MemberDto>(_mapper.ConfigurationProvider), usersParams.PageNumber, usersParams.PageSize)); }
public async Task <PagedList <MemberDTO> > GetMembersAsync(UsersParams usersParams) { // add default gender, remove current user, add opposite gender for current user // filter by age range also var query = _context.Users.AsQueryable(); query = query.Where(u => u.UserName != usersParams.CurrentUserName); query = query.Where(u => u.Gender == usersParams.Gender); var minDob = DateTime.Today.AddYears(-usersParams.MaxAge - 1); var maxDob = DateTime.Today.Date.AddYears(-usersParams.MinAge); query = query.Where(u => u.DateOfBirth >= minDob && u.DateOfBirth <= maxDob); query = usersParams.OrderBy switch { "created" => query.OrderByDescending(u => u.Created), _ => query.OrderByDescending(u => u.LastActive) }; return(await PagedList <MemberDTO> .CreateAsync( query.ProjectTo <MemberDTO>(_mapper.ConfigurationProvider).AsNoTracking(), usersParams.PageNumber, usersParams.PageSize)); }