コード例 #1
0
        public static string GenerateCatalogItemCacheKey(CatalogPageFiltersViewModel catalogPageFiltersViewModel)
        {
            if (catalogPageFiltersViewModel.PageId < 0)
            {
                throw new InvalidPageIndexException(catalogPageFiltersViewModel.PageId);
            }

            string searchTerms = string.IsNullOrEmpty(catalogPageFiltersViewModel.SearchTextFilter)?"":catalogPageFiltersViewModel.SearchTextFilter.Replace(" ", "");

            return(string.Format(_itemsKeyTemplate, catalogPageFiltersViewModel.PageId, catalogPageFiltersViewModel.ItemsPerPage, catalogPageFiltersViewModel.Culture, catalogPageFiltersViewModel.BrandFilter, catalogPageFiltersViewModel.TypesFilter, searchTerms,
                                 catalogPageFiltersViewModel.OrderBy, catalogPageFiltersViewModel.Order.ToString()));
        }
コード例 #2
0
        public async Task OnGet(CatalogPageFiltersViewModel catalogPageModel, string culture)//CatalogIndexViewModel catalogModel
        {
            catalogPageModel.ItemsPerPage = 0;
            catalogPageModel.PageId       = 0;

            if (!string.IsNullOrEmpty(culture))
            {
                catalogPageModel.Culture = culture;
            }

            CatalogModel = await _catalogViewModelService.GetCatalogItems(catalogPageModel, false, true);

            CatalogPageModel = catalogPageModel;
        }
コード例 #3
0
        /// <summary>
        /// Get catalog items
        /// </summary>
        /// <param name="catalogPageFiltersViewModel"></param>
        /// <param name="useCache"></param>
        /// <param name="convertPrice"></param>
        /// <param name="cancelattionToken"></param>
        /// <returns></returns>
        public async Task <CatalogIndexViewModel> GetCatalogItems(CatalogPageFiltersViewModel catalogPageFiltersViewModel, bool useCache, bool convertPrice = false, CancellationToken cancelattionToken = default(CancellationToken))
        {
            if (useCache)
            {
                var cacheKey = CacheHelpers.GenerateCatalogItemCacheKey(catalogPageFiltersViewModel);

                return(await _cache.GetOrCreateAsync(cacheKey, async entry =>
                {
                    entry.SlidingExpiration = CacheHelpers.DefaultCacheDuration;
                    return await _catalogViewModelService.GetCatalogItems(catalogPageFiltersViewModel, useCache, convertPrice, cancelattionToken);
                }));
            }
            else
            {
                return(await _catalogViewModelService.GetCatalogItems(catalogPageFiltersViewModel, useCache, convertPrice, cancelattionToken));
            }
        }
コード例 #4
0
        public async Task <CatalogIndexViewModel> GetCatalogItems(CatalogPageFiltersViewModel catalogPageFiltersViewModel, bool useCache, bool convertPrice = false, CancellationToken cancellationToken = default(CancellationToken))
        {
            _logger.LogInformation("GetCatalogItems called.");

            var filterSpecification          = new CatalogFilterSpecification(catalogPageFiltersViewModel.BrandFilter, catalogPageFiltersViewModel.TypesFilter, catalogPageFiltersViewModel.SearchTextFilter);
            var filterPaginatedSpecification =
                new CatalogFilterPaginatedSpecification(catalogPageFiltersViewModel.ItemsPerPage * catalogPageFiltersViewModel.PageId, catalogPageFiltersViewModel.ItemsPerPage, catalogPageFiltersViewModel.SearchTextFilter, catalogPageFiltersViewModel.OrderBy, catalogPageFiltersViewModel.Order, catalogPageFiltersViewModel.BrandFilter, catalogPageFiltersViewModel.TypesFilter);

            // the implementation below using ForEach and Count. We need a List.
            var totalItems = await _itemRepository.CountAsync(filterSpecification);

            var itemsOnPage = await _itemRepository.ListAsync(filterPaginatedSpecification);

            foreach (var itemOnPage in itemsOnPage)
            {
                itemOnPage.PictureUri = _uriComposer.ComposePicUri(itemOnPage.PictureUri);
            }

            var catalogItemsTask = await Task.WhenAll(itemsOnPage.Select(catalogItem => CreateCatalogItemViewModel(catalogItem, convertPrice, cancellationToken)));

            // em caso de algures haver um cancelamento o código para aqui e devolve um erro. Escusa de proceguir no processamento
            cancellationToken.ThrowIfCancellationRequested();

            var vm = new CatalogIndexViewModel()
            {
                CatalogItems = catalogItemsTask,
                Brands       = await GetBrands(cancellationToken),
                Types        = await GetTypes(cancellationToken),
                //BrandFilterApplied = catalogPageFiltersViewModel.BrandFilter ?? 0,
                //TypesFilterApplied = catalogPageFiltersViewModel.TypesFilter ?? 0,
                PaginationInfo = new PaginationInfoViewModel()
                {
                    ActualPage   = catalogPageFiltersViewModel.PageId,
                    ItemsPerPage = itemsOnPage.Count,
                    TotalItems   = totalItems,
                    TotalPages   = catalogPageFiltersViewModel.ItemsPerPage == 0 ? 1 :
                                   int.Parse(Math.Ceiling(((decimal)totalItems / catalogPageFiltersViewModel.ItemsPerPage)).ToString())
                }
            };

            vm.PaginationInfo.Next     = (vm.PaginationInfo.ActualPage == vm.PaginationInfo.TotalPages - 1) ? "is-disabled" : "";
            vm.PaginationInfo.Previous = (vm.PaginationInfo.ActualPage == 0) ? "is-disabled" : "";

            return(vm);
        }
コード例 #5
0
        public async Task <FileResult> RenderAsync()
        {
            var catalogPageModel = new CatalogPageFiltersViewModel()
            {
                Culture      = CultureInfo.CurrentCulture.Name,
                ItemsPerPage = 0
            };
            var catalogModel = await _catalogViewModelService.GetCatalogItems(catalogPageModel, false, true);

            var cc = catalogModel.CatalogItems.FirstOrDefault();

            var html = await _viewRenderService.RenderToStringAsync("Pdf/Catalog", cc);

            var htmlToPdf = new HtmlToPdf();
            var pdf       = await htmlToPdf.RenderHtmlAsPdfAsync(html);

            return(File(pdf.BinaryData, "application/pdf;", "Catalog.pdf"));
        }
コード例 #6
0
        public void ReturnCatalogItemCacheKey(
            int pageIndex,
            int itemPerPage,
            string culture,
            int?brandId,
            int?typeId,
            string searchText,
            NamesOrderBy?orderBy,
            Ordination order,
            string expectedResult,
            Type exceptionType = null
            )
        {
            var catalogPageFiltersViewModel = new CatalogPageFiltersViewModel()
            {
                PageId           = pageIndex,
                ItemsPerPage     = itemPerPage,
                Culture          = culture,
                BrandFilter      = brandId,
                TypesFilter      = typeId,
                SearchTextFilter = searchText,
                OrderBy          = orderBy,
                Order            = order
            };

            if (string.IsNullOrEmpty(expectedResult))
            {
                if (exceptionType == null)
                {
                    throw new Exception("Missing exception type to check");
                }
                Assert.Throws(
                    exceptionType,
                    () => CacheHelpers.GenerateCatalogItemCacheKey(catalogPageFiltersViewModel));
            }
            else
            {
                var result = CacheHelpers.GenerateCatalogItemCacheKey(catalogPageFiltersViewModel);

                Assert.Equal(expectedResult, result);
            }
        }
コード例 #7
0
        public async Task <FileResult> ScribanAsync()
        {
            var pathTemplate    = _configuration.GetValue <string>("Template:CatalogPdf");
            var templateContent = await System.IO.File.ReadAllTextAsync(pathTemplate);

            var template = Template.Parse(templateContent);

            var catalogPageModel = new CatalogPageFiltersViewModel()
            {
                Culture      = CultureInfo.CurrentCulture.Name,
                ItemsPerPage = 0
            };
            var catalogModel = await _catalogViewModelService.GetCatalogItems(catalogPageModel, false, true);

            var listCatalogItems = new List <CatalogItemViewModel>();

            foreach (var item in catalogModel.CatalogItems)
            {
                listCatalogItems.Add(
                    new CatalogItemViewModel()
                {
                    Name        = item.Name,
                    Price       = item.Price,
                    ShowPrice   = item.ShowPrice,
                    PriceSymbol = item.PriceSymbol,
                    PictureUri  = System.IO.Path.GetFullPath($"~{item.PictureUri}").Replace("~", "wwwroot")
                                  //PictureUri = "C:\\Formacao\\ASP.Net\\desenvolvimento\\eShopOnWeb\\src\\Web\\wwwroot\\images\\products\\1.png"
                }
                    );
            }

            MemberRenamerDelegate memberRenamer = member => member.Name;
            var pp   = new { Data = listCatalogItems, Date = DateTime.Now.ToString(), Year = DateTime.Now.Year  };
            var html = template.Render(pp, memberRenamer);

            var htmlToPdf = new HtmlToPdf();
            var pdf       = await htmlToPdf.RenderHtmlAsPdfAsync(html);

            return(File(pdf.BinaryData, "application/pdf;", "Catalog.pdf"));
        }
コード例 #8
0
        public async Task OnGet(CatalogPageFiltersViewModel catalogPageModel, int?pageId)
        {
            CatalogModel = await _catalogViewModelService.GetCatalogItems(catalogPageModel, false, false);

            CatalogPageModel = catalogPageModel;
        }