Esempio n. 1
0
        public async Task <IReadOnlyCollection <PilotDto> > GetAllPilotsAsync(PilotSSFP options)
        {
            var pilotsQuery = _paraContext.Pilots // DEFERRED EXECUTION
                              .AsNoTracking()
                              .SearchPilotBy(options)
                              .SortPilotsBy(options.SortBy)
                              .FilterPilotBy(options.FilterBy, options.LicenseID) // RESTRICTION = WHERE
                              .Select(p => new PilotDto                           // PROJECTION = SELECT
            {
                PilotId         = p.ID,
                FirstName       = p.FirstName,
                LastName        = p.LastName,
                Address         = p.Address,
                PhoneNumber     = p.PhoneNumber,
                Weight          = p.Weight,
                IsActive        = p.IsActive,
                NumberOfFlights = p.Flights.Count
            });

            options.SetPagingValues(pilotsQuery);

            var pagedQuery = pilotsQuery.Page <PilotDto>(options.PageNumber - 1, options.PageSize); // PAGINATION

            return(await pagedQuery.ToListAsync());                                                 // FLATTENING = ITERATION
        }
Esempio n. 2
0
        private string CreateResourceUri(PilotSSFP options, RessourceUriType type)
        {
            switch (type)
            {
            case RessourceUriType.PreviousPage:
                return(Url.Link("GetAllPilotsAsync",
                                new
                {
                    PageNumber = options.PageNumber - 1,
                    options.PageSize,
                    options.SortBy,
                    options.FilterBy,
                    options.SearchBy,
                    options.LicenseID
                }));

            case RessourceUriType.NextPage:
                return(Url.Link("GetAllPilotsAsync",
                                new
                {
                    PageNumber = options.PageNumber + 1,
                    options.PageSize,
                    options.SortBy,
                    options.FilterBy,
                    options.SearchBy,
                    options.LicenseID
                }));

            default:
                return(Url.Link("GetAllPilotsAsync",
                                new
                {
                    options.PageNumber,
                    options.PageSize,
                    options.SortBy,
                    options.FilterBy,
                    options.SearchBy,
                    options.LicenseID
                }));
            }
        }
Esempio n. 3
0
        public async Task <ActionResult <IReadOnlyCollection <PilotDto> > > GetAllPilotsAsync([FromQuery] PilotSSFP options)
        {
            var pilots = await _pilotsService.GetAllPilotsAsync(options);

            if (pilots == null)
            {
                return(NotFound("Collection was empty :( "));
            }

            if ((int)options.FilterBy == 3)
            {
                var license = await _licensesService.GetLicenseAsync(options.LicenseID);

                if (license == null)
                {
                    return(NotFound("License not valid"));
                }
            }
            ;

            var previousPageLink = options.HasPrevious ? CreateResourceUri(options, RessourceUriType.PreviousPage) : null;
            var nextPageLink     = options.HasNext ? CreateResourceUri(options, RessourceUriType.NextPage) : null;

            var paginationMetadata = new
            {
                options.TotalCount,
                options.PageSize,
                options.PageNumber,
                options.TotalPages,
                options.SortBy,
                options.FilterBy,
                options.SearchBy,
                options.LicenseID,
                previousPageLink,
                nextPageLink
            };

            Response.Headers.Add("X-Pagination", JsonSerializer.Serialize(paginationMetadata));

            return(Ok(pilots));
        }