Beispiel #1
0
        /// <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
                }));
            }
        }
Beispiel #2
0
        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));
        }
Beispiel #3
0
        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());
        }