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 }
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 })); } }
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)); }