public async Task <GenericResponse <ShapedDataWithLinks> > GetRefreshTokens(RefreshTokenResourceParameter resourceParameter, string mediaType)
        {
            try
            {
                if (!MediaTypeHeaderValue.TryParse(mediaType,
                                                   out MediaTypeHeaderValue parsedMediaType))
                {
                    return(GenericResponseBuilder.NoSuccess <ShapedDataWithLinks>(null, "Wrong media type"));
                }

                var refreshTokens = await this.dataService.RefreshTokens.FindAllAsync(resourceParameter);

                if (refreshTokens.Count == 0)
                {
                    return(GenericResponseBuilder.Success <ShapedDataWithLinks>(null));
                }

                var paginationMetaData = new PaginationMetaData
                {
                    TotalCount  = refreshTokens.TotalCount,
                    PageSize    = refreshTokens.PageSize,
                    CurrentPage = refreshTokens.CurrentPage,
                    TotalPages  = refreshTokens.TotalPages
                };

                var links = CreateLinksForRefreshTokens(resourceParameter, refreshTokens.HasNext, refreshTokens.HasPrevious);

                var shapedRefreshTokens = this.mapper
                                          .Map <IEnumerable <RefreshTokenDto> >(refreshTokens)
                                          .ShapeData(resourceParameter.Fields);

                var includeLinks = parsedMediaType.SubTypeWithoutSuffix
                                   .EndsWith("hateoas", StringComparison.InvariantCultureIgnoreCase);

                var refreshTokensToReturnWithLinks = shapedRefreshTokens.Select(token =>
                {
                    var tokenAsDictionary = token as IDictionary <string, object>;
                    if (includeLinks)
                    {
                        var userLinks = CreateLinksForRefreshToken((Guid)tokenAsDictionary["Id"], resourceParameter.Fields);
                        tokenAsDictionary.Add("links", userLinks);
                    }
                    return(tokenAsDictionary);
                });

                var refreshTokensToReturn = new ShapedDataWithLinks()
                {
                    Value = refreshTokensToReturnWithLinks,
                    Links = links,
                    PaginationMetaData = paginationMetaData
                };

                return(GenericResponseBuilder.Success <ShapedDataWithLinks>(refreshTokensToReturn));
            }
            catch (Exception ex)
            {
                logger.LogError(string.Format("Error in BLL - GetRefreshTokens. {0}", ex.Message));
                return(GenericResponseBuilder.NoSuccess <ShapedDataWithLinks>(null, ex.Message.ToString()));
            }
        }
        private IEnumerable <LinkDto> CreateLinksForRefreshTokens(
            RefreshTokenResourceParameter resourceParameters,
            bool hasNextPage,
            bool hasPreviousPage)
        {
            var links = new List <LinkDto>();

            links.Add(new LinkDto(
                          CreateRefreshTokenResourceUri(resourceParameters, ResourceUriType.Current),
                          "self",
                          "GET"));

            if (hasNextPage)
            {
                links.Add(new LinkDto(
                              CreateRefreshTokenResourceUri(resourceParameters, ResourceUriType.NextPage),
                              "next_page",
                              "GET"));
            }
            if (hasPreviousPage)
            {
                links.Add(new LinkDto(
                              CreateRefreshTokenResourceUri(resourceParameters, ResourceUriType.PreviousPage),
                              "previous_page",
                              "GET"));
            }
            return(links);
        }
        private string CreateRefreshTokenResourceUri(
            RefreshTokenResourceParameter resourceParameters,
            ResourceUriType type)
        {
            switch (type)
            {
            case ResourceUriType.PreviousPage:
                return(url.Link("GetRefreshTokens",
                                new
                {
                    fields = resourceParameters.Fields,
                    pageNumber = resourceParameters.PageNumber - 1,
                    pageSize = resourceParameters.PageSize,
                }));

            case ResourceUriType.NextPage:
                return(url.Link("GetRefreshTokens",
                                new
                {
                    fields = resourceParameters.Fields,
                    pageNumber = resourceParameters.PageNumber + 1,
                    pageSize = resourceParameters.PageSize,
                }));

            case ResourceUriType.Current:
            default:
                return(url.Link("GetRefreshTokens",
                                new
                {
                    fields = resourceParameters.Fields,
                    pageNumber = resourceParameters.PageNumber,
                    pageSize = resourceParameters.PageSize,
                }));
            }
        }
        // GET: api/refreshtokens
        public async Task <IActionResult> Get(
            [FromQuery] RefreshTokenResourceParameter resourceParameter,
            [FromHeader(Name = "Accept")] string mediaType)
        {
            var response = await this.businessLogic.GetRefreshTokens(resourceParameter, mediaType);

            if (!response.IsSuccessful)
            {
                return(BadRequest(new { message = response.ErrorMessage }));
            }

            if (response.Result == null)
            {
                return(NotFound());
            }

            Response.Headers.Add("X-Pagination",
                                 JsonSerializer.Serialize(response.Result.PaginationMetaData));

            return(Ok(
                       new
            {
                value = response.Result.Value,
                links = response.Result.Links
            }
                       ));
        }
Example #5
0
        public async Task <PagedList <RefreshToken> > FindAllAsync(RefreshTokenResourceParameter resourceParameter)
        {
            if (resourceParameter is null)
            {
                throw new ArgumentNullException(nameof(resourceParameter));
            }

            var collection = this.context.RefreshToken as IQueryable <RefreshToken>;

            return(await PagedList <RefreshToken> .CreateAsync(
                       collection,
                       resourceParameter.PageNumber,
                       resourceParameter.PageSize));
        }