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