/// <summary> /// Pagination /// </summary> /// <param name="options"> PosessionSSFP for search, sort, filter and pagination feature> </param> /// <returns> private string CreateResourceUri(PossessionSSFP options, RessourceUriType type) { switch (type) { case RessourceUriType.PreviousPage: return(Url.Link("GetAllPossessionsAsync", new { PageNumber = options.PageNumber - 1, options.PageSize, options.FilterBy, options.LevelOfPilot, options.PossessionYear })); case RessourceUriType.NextPage: return(Url.Link("GetAllPossessionsAsync", new { PageNumber = options.PageNumber + 1, options.PageSize, options.FilterBy, options.LevelOfPilot, options.PossessionYear })); default: return(Url.Link("GetAllPilotsAsync", new { options.PageNumber, options.PageSize, options.FilterBy, options.LevelOfPilot, options.PossessionYear })); } }
public async Task <ActionResult <IReadOnlyCollection <PossessionDto> > > GetAllPossessionsAsync([FromQuery] PossessionSSFP options) { var possessions = await _possessionsService.GetAllPossessionsAsync(options); if (possessions == null) { return(NotFound("Collection was empty")); } 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, previousPageLink, nextPageLink, options.FilterBy, options.LevelOfPilot, options.PossessionYear }; Response.Headers.Add("X-Pagination", JsonSerializer.Serialize(paginationMetadata)); return(Ok(possessions)); }
/// <inheritdoc /> public async Task <IReadOnlyCollection <PossessionDto> > GetAllPossessionsAsync(PossessionSSFP options) { var possessions = _paraContext.Possessions .AsNoTracking() .FilterPossessionBy(options) .Select(po => new PossessionDto { PilotID = po.PilotID, LicenseID = po.LicenseID, ExamDate = po.ExamDate, IsSucceeded = po.IsSucceeded, IsActive = po.IsActive }); options.SetPagingValues(possessions); var pagedQuery = possessions.Page(options.PageNumber - 1, options.PageSize); // PAGINATION return(await pagedQuery.ToListAsync()); }