public IActionResult Get(UrlResourceParameter urlResourceParameter)
        {
            var urls = _urlShortenerRepository.FindAll(urlResourceParameter);

            var paginationMetaData = new
            {
                totalCount  = urls.TotalCount,
                pageSize    = urls.PageSize,
                currentPage = urls.CurrentPage,
                totalPages  = urls.TotalPages
            };

            Response.Headers.Add("X-Pagination", JsonConvert.SerializeObject(paginationMetaData));

            var urlDtos = urls.Select(u => new ShortenedUrlDto(_options.Domain)
            {
                Id           = u.Id,
                Url          = u.Url,
                CreationDate = u.CreationDate,
                Clicks       = u.Clicks,
                LastVisit    = u.LastVisit
            });

            return(Ok(urlDtos));
        }
        public PageList <ShortenedUrlEntity> FindAll(UrlResourceParameter urlResourceParameter)
        {
            var urls = _urlShortenerContext.ShortenedUrls.
                       OrderByDescending(u => u.CreationDate);

            return(PageList <ShortenedUrlEntity> .Create(urls,
                                                         urlResourceParameter.PageNumber,
                                                         urlResourceParameter.PageSize));
        }
Пример #3
0
        public async Task <IActionResult> Index(UrlResourceParameter urlResourceParameter)
        {
            HttpResponseMessage response;

            using (var client = new HttpClient())
            {
                var query = $"{_api.ApiEndPoint}/?PageNumber={urlResourceParameter.PageNumber}&pageSize={urlResourceParameter.PageSize}";
                response = await client.GetAsync(query);
            }

            if (!response.IsSuccessStatusCode)
            {
                ModelState.AddModelError("", response.ReasonPhrase);
            }

            var content = await response.Content.ReadAsStringAsync();

            var shUrlList = JsonConvert.DeserializeObject <List <ShortenedUrlDto> >(content);

            ViewData["shUrlList"] = shUrlList;

            var pagination = response.Headers.GetValues("X-Pagination");
            var pagJson    = JsonConvert.DeserializeObject <Dictionary <string, string> >(pagination.FirstOrDefault());

            pagJson.Add("nextPage", int.Parse(pagJson["currentPage"]) < int.Parse(pagJson["totalPages"])
                ? $"{int.Parse(pagJson["currentPage"]) + 1}"
                : "#");

            pagJson.Add("previousPage", int.Parse(pagJson["currentPage"]) > 1
                ? $"{int.Parse(pagJson["currentPage"]) - 1}"
                : "#");

            ViewData["pagination"] = pagJson;

            return(View());
        }