/// <summary> /// Refactoring method that, given user parameters, creates a custom URL link to the previous and next page. /// </summary> /// <param name="options">The user custom options or default options for the search, sort, filter and pagination features.</param> /// <param name="type">One element of the enumeration to distinguish the multiple types of URLs to create.</param> /// <returns> /// A string that contains an URL link to the previous, the next page, or the current page by default. /// </returns> private string CreateResourceUri(ParaglidersSSFP options, ResourceUriType type) { switch (type) { case ResourceUriType.PreviousPage: return(Url.Link("GetAllParaglidersAsync", new { PageNumber = options.PageNumber = -1, options.PageSize, options.SearchBy, options.FilterBy, options.SortBy, options.LastRevisionDate, options.Name })); case ResourceUriType.NextPage: return(Url.Link("GetAllParaglidersAsync", new { PageNumber = options.PageNumber + 1, options.PageSize, options.SearchBy, options.FilterBy, options.SortBy, options.LastRevisionDate, options.Name })); default: return(Url.Link("GetAllParaglidersAsync", new { options.PageNumber, options.PageSize, options.FilterBy, options.SortBy, options.SearchBy, options.LastRevisionDate, options.Name })); } }
public async Task <ActionResult <IReadOnlyCollection <ParagliderDto> > > GetAllParaglidersAsync([FromQuery] ParaglidersSSFP options) { var paraglider = await _paragliderService.GetAllParaglidersAsync(options); if (paraglider == null) { return(NotFound("There is no paraglider ")); } var previousPageLink = options.HasPrevious ? CreateResourceUri(options, ResourceUriType.PreviousPage) : null; var nextPageLink = options.HasNext ? CreateResourceUri(options, ResourceUriType.NextPage) : null; var paginationMetadata = new { options.TotalCount, options.PageSize, options.PageNumber, options.TotalPages, options.SearchBy, options.DateLastRevision, options.Name, previousPageLink, nextPageLink }; Response.Headers.Add("X-Pagination", JsonSerializer.Serialize(paginationMetadata)); return(Ok(paraglider)); }
public async Task <IReadOnlyCollection <ParagliderDto> > GetAllParaglidersAsync(ParaglidersSSFP options) { var paragliders = _paraContext.Paragliders .AsNoTracking() .FilterParaglidersBy(options.FilterBy, options.CommissionDate, options.LastRevisionDate, options.ParagliderModelId) .SearchParaglidersBy(options) .SortParagliderBy(options.SortBy) .Select(p => new ParagliderDto { ParagliderId = p.ID, Name = p.Name, CommissioningDate = p.CommissioningDate, LastRevision = p.LastRevisionDate, ParagliderModelId = p.ParagliderModel.ID, NumerOfFlights = p.Flights.Count() }); options.SetPagingValues(paragliders); var pagedQuery = paragliders.Page(options.PageNumber - 1, options.PageSize); return(await pagedQuery.ToListAsync()); }