private ProductPageViewModel Build(ProductModel productModel)
        {
            var viewModel = productModel.MapTo <ProductPageViewModel>();

            viewModel.ProductItem           = _itemViewModelBuilder.Build(productModel, false);
            viewModel.InformationTemplate   = _productFieldViewModelBuilder.Build(productModel, "Product information");
            viewModel.SpecificationTemplate = _productFieldViewModelBuilder.Build(productModel, "Product specification");

            viewModel.BrandPage           = GetBrandPage(viewModel.ProductItem.Brand);
            viewModel.AccessoriesProducts = GetRelatedProducts(productModel, RelationTypeNameConstants.Accessory);
            viewModel.SimilarProducts     = GetRelatedProducts(productModel, RelationTypeNameConstants.SimilarProducts);

            return(viewModel);
        }
        private async Task BuildProducts(CategoryPageViewModel pageModel)
        {
            var searchQuery = _requestModelAccessor.RequestModel.SearchQuery.Clone();

            if (searchQuery.PageSize == null)
            {
                var pageSize = _requestModelAccessor.RequestModel.WebsiteModel.GetValue <int?>(AcceleratorWebsiteFieldNameConstants.ProductsPerPage) ?? DefaultWebsiteFieldValueConstants.ProductsPerPage;
                searchQuery.PageSize = pageSize;
            }

            var searchResults = await _productSearchService.SearchAsync(searchQuery, searchQuery.Tags, true, true, true);

            if (searchResults == null)
            {
                pageModel.Pagination = new PaginationViewModel(0, 1);
                return;
            }

            pageModel.Products   = searchResults.Items.Value.Cast <ProductSearchResult>().Select(c => _productItemBuilder.Build(c.Item)).ToList();
            pageModel.Pagination = new PaginationViewModel(searchResults.Total, searchQuery.PageNumber, searchResults.PageSize);
        }
        public ProductListViewModel Build()
        {
            var page      = _requestModelAccessor.RequestModel.CurrentPageModel;
            var viewModel = page.MapTo <ProductListViewModel>();

            var searchQuery = _requestModelAccessor.RequestModel.SearchQuery.Clone();

            if (searchQuery.PageSize == null)
            {
                var pageSize = _requestModelAccessor.RequestModel.WebsiteModel.Fields.GetValue <int?>(AcceleratorWebsiteFieldNameConstants.ProductsPerPage) ?? DefaultWebsiteFieldValueConstants.ProductsPerPage;
                searchQuery.PageSize = pageSize;
            }

            if (!searchQuery.ContainsFilter())
            {
                searchQuery.CategoryShowRecursively = false;
            }

            var searchResponse = _productSearchService.Search(searchQuery, searchQuery.Tags, true, true, true);
            var searchResults  = searchResponse == null ? null : _productSearchService.Transform(searchQuery, searchResponse);

            if (searchResults != null)
            {
                viewModel.Products   = searchResults.Items.Value.Cast <ProductSearchResult>().Select(c => _productItemBuilder.Build(c.Item)).ToList();
                viewModel.Pagination = new PaginationViewModel(searchResults.Total, searchQuery.PageNumber, searchResults.PageSize);
            }

            return(viewModel);
        }