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())); }
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; }
/// <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)); } }
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); }
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")); }
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); } }
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")); }
public async Task OnGet(CatalogPageFiltersViewModel catalogPageModel, int?pageId) { CatalogModel = await _catalogViewModelService.GetCatalogItems(catalogPageModel, false, false); CatalogPageModel = catalogPageModel; }