public async Task <PagedList <ApplicationUser> > FindAllAsync(ApplicationUserResourceParameter resourceParameter) { if (resourceParameter is null) { throw new ArgumentNullException(nameof(resourceParameter)); } var collection = this.userManager.Users as IQueryable <ApplicationUser>; if (!string.IsNullOrEmpty(resourceParameter.SearchQuery)) { var searchQuery = resourceParameter.SearchQuery.Trim(); collection = collection.Where(u => u.Email.Contains(searchQuery, StringComparison.OrdinalIgnoreCase)); } if (!string.IsNullOrEmpty(resourceParameter.OrderBy)) { var propertyMappingDictionary = this.propertyMappingService.GetPropertyMapping <UserDto, ApplicationUser>(); collection = collection.ApplySort(resourceParameter.OrderBy, propertyMappingDictionary); } return(await PagedList <ApplicationUser> .CreateAsync( collection, resourceParameter.PageNumber, resourceParameter.PageSize)); }
private IEnumerable <LinkDto> CreateLinksForUsers( ApplicationUserResourceParameter resourceParameters, bool hasNextPage, bool hasPreviousPage) { var links = new List <LinkDto>(); links.Add(new LinkDto( CreateUsersResourceUri(resourceParameters, ResourceUriType.Current), "self", "GET")); if (hasNextPage) { links.Add(new LinkDto( CreateUsersResourceUri(resourceParameters, ResourceUriType.NextPage), "next_page", "GET")); } if (hasPreviousPage) { links.Add(new LinkDto( CreateUsersResourceUri(resourceParameters, ResourceUriType.PreviousPage), "previous_page", "GET")); } return(links); }
// GET: api/users public async Task <IActionResult> GetUsers( [FromQuery] ApplicationUserResourceParameter resourceParameter, [FromHeader(Name = "Accept")] string mediaType) { var response = await this.businessLogic.GetUsers(resourceParameter, mediaType); if (!response.IsSuccessful) { return(BadRequest(new { message = response.ErrorMessage })); } if (response.Result == null) { return(NotFound()); } Response.Headers.Add("X-Pagination", JsonSerializer.Serialize(response.Result.PaginationMetaData)); return(Ok( new { value = response.Result.Value, links = response.Result.Links } )); }
private string CreateUsersResourceUri( ApplicationUserResourceParameter resourceParameters, ResourceUriType type) { switch (type) { case ResourceUriType.PreviousPage: return(url.Link("GetUsers", new { fields = resourceParameters.Fields, orderBy = resourceParameters.OrderBy, pageNumber = resourceParameters.PageNumber - 1, pageSize = resourceParameters.PageSize, searchQuery = resourceParameters.SearchQuery })); case ResourceUriType.NextPage: return(url.Link("GetUsers", new { fields = resourceParameters.Fields, orderBy = resourceParameters.OrderBy, pageNumber = resourceParameters.PageNumber + 1, pageSize = resourceParameters.PageSize, searchQuery = resourceParameters.SearchQuery })); case ResourceUriType.Current: default: return(url.Link("GetUsers", new { fields = resourceParameters.Fields, orderBy = resourceParameters.OrderBy, pageNumber = resourceParameters.PageNumber, pageSize = resourceParameters.PageSize, searchQuery = resourceParameters.SearchQuery })); } }
public async Task <GenericResponse <ShapedDataWithLinks> > GetUsers(ApplicationUserResourceParameter resourceParameter, string mediaType) { try { if (!MediaTypeHeaderValue.TryParse(mediaType, out MediaTypeHeaderValue parsedMediaType)) { return(GenericResponseBuilder.NoSuccess <ShapedDataWithLinks>(null, "Wrong media type")); } if (!propertyMappingService.ValidMappingExistsFor <UserDto, ApplicationUser>(resourceParameter.OrderBy)) { return(GenericResponseBuilder.NoSuccess <ShapedDataWithLinks>(null, "Wrong OrderBy entered")); } if (!propertyCheckerService.TypeHasProperties <UserDto>(resourceParameter.Fields, true)) { return(GenericResponseBuilder.NoSuccess <ShapedDataWithLinks>(null, "Wrong fields entered")); } var users = await this.dataService.UserManagerExtensions.FindAllAsync(resourceParameter); if (users.Count == 0) { return(GenericResponseBuilder.Success <ShapedDataWithLinks>(null)); } var paginationMetaData = new PaginationMetaData { TotalCount = users.TotalCount, PageSize = users.PageSize, CurrentPage = users.CurrentPage, TotalPages = users.TotalPages }; var links = CreateLinksForUsers(resourceParameter, users.HasNext, users.HasPrevious); var shapedUsersToReturn = this.mapper .Map <IEnumerable <UserDto> >(users) .ShapeData(resourceParameter.Fields); var includeLinks = parsedMediaType.SubTypeWithoutSuffix .EndsWith("hateoas", StringComparison.InvariantCultureIgnoreCase); var shapedUsersToReturnWithLinks = shapedUsersToReturn.Select(user => { var userAsDictionary = user as IDictionary <string, object>; if (includeLinks) { var userLinks = CreateLinksForUser((Guid)userAsDictionary["Id"], resourceParameter.Fields); userAsDictionary.Add("links", userLinks); } return(userAsDictionary); }); var usersToReturn = new ShapedDataWithLinks() { Value = shapedUsersToReturnWithLinks, Links = links, PaginationMetaData = paginationMetaData }; return(GenericResponseBuilder.Success <ShapedDataWithLinks>(usersToReturn)); } catch (Exception ex) { logger.LogError(string.Format("Error in BLL - GetUsers. {0}", ex.Message)); return(GenericResponseBuilder.NoSuccess <ShapedDataWithLinks>(null, ex.Message.ToString())); } }