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