public async Task<IActionResult> SearchProducts(ProductSearchRequest request)
        {
            var products = await _productService.SearchProductsWithWeightAsync(
                request.Keyword, 
                request.Terms, 
                request.SortField, 
                request.SortDescending, 
                request.From, 
                request.Size);

            var suggest = await _productService.GetSearchSuggestionAsync(request.Keyword);

            return Json(new { Products = products, Suggest = suggest });
        }
예제 #2
0
        private ProductViewModel GetData(ProductSearchRequest request)
        {
            ProductResponse products = productService.LoadAllProducts(request);
            IEnumerable <Models.Product> enumerableProduct = products.Products.Select(product => product.CreateFrom()).ToList();
            var productViewModel = new ProductViewModel
            {
                ProductList          = new StaticPagedList <Models.Product>(enumerableProduct, request.PageNo, request.PageSize, products.TotalCount),
                Categories           = categoryService.LoadAllCategories().AsEnumerable(),
                TotalPrice           = enumerableProduct.Select(x => x.Price).Sum(),
                TotalNoOfRec         = products.TotalCount,
                ProductSearchRequest = request,
                Products             = new SelectList(Enumerable.Empty <Models.Product>(), "Id", "Name")//you can assume its a list of sub-categories
            };

            return(productViewModel);
        }
 /// <summary>
 /// 产品搜索
 /// </summary>
 /// <param name="request"></param>
 /// <returns></returns>
 public Task <List <TbkProductInfo> > Search(ProductSearchRequest request)
 {
     return(Task.Factory.StartNew(() =>
     {
         List <TbkProductInfo> result = new List <TbkProductInfo>();
         TbkDgItemCouponGetRequest req = new TbkDgItemCouponGetRequest();
         req.AdzoneId = ConstantsUtils.ADZONE_ID;
         req.Platform = ConstantsUtils.PLATFORM;
         req.PageSize = request.PageSize;
         req.PageNo = request.PageNo;
         if (!string.IsNullOrWhiteSpace(request.KeyWord))
         {
             req.Q = request.KeyWord;
         }
         if (request.CategoryIds != null && request.CategoryIds.Count >= 1)
         {
             req.Cat = string.Join(",", request.CategoryIds);
         }
         var response = client.Execute(req);
         if (null != response && response.Results != null)
         {
             response.Results.ForEach(item =>
             {
                 Tuple <decimal, string> coupon = CouponInfoFomarter.GetCouponPrice(item.CouponInfo);
                 if (coupon.Item1 <= 0 || item.ZkFinalPrice.ToDecimal() - coupon.Item1 < 0)
                 {
                     return;
                 }
                 result.Add(new TbkProductInfo()
                 {
                     CP = coupon.Item2,
                     FP = (item.ZkFinalPrice.ToDouble() - coupon.Item2.ToDouble()).ToString(),
                     PTLX = item.UserType.ToString(),
                     SPID = item.NumIid,
                     SPMC = item.Title,
                     SPYHQTGLJ = item.CouponClickUrl,
                     SPYXL = item.Volume,
                     SPZT = ToolUtils.GetThumbnail(item.PictUrl),
                     SPJG = item.ZkFinalPrice,
                     Rate = item.CommissionRate.ToDouble(),
                     Desc = item.ItemDescription,
                 });
             });
         }
         return result;
     }));
 }
    public async Task <IActionResult> GetProductionsGrpcAsync()
    {
        var request = new ProductSearchRequest
        {
            StatusCode = 1000
        };

        request.Ids.AddRange(new long[] { 285806185760389, 285806311700101 });
        var grpcResult = await _whseGrpcClient.GetProductsAsync(request, GrpcClientConsts.BasicHeader);

        if (grpcResult.IsSuccessStatusCode && grpcResult.Content.Is(ProductListReply.Descriptor))
        {
            var unpackResult = grpcResult.Content.Unpack <ProductListReply>();
            return(Ok(unpackResult));
        }
        return(NoContent());
    }
        public async Task <ProductSearchResponse> ProductSearch(ProductSearchRequest productSearchModel, ViatorSetting setting = null)
        {
            var uri      = $"service/search/products";
            var response = await _httpClient.PostAsync <ProductSearchRequest>(GenerateBaseURL(uri, setting), productSearchModel);

            if (response.IsSuccessStatusCode)
            {
                var content = response.Content.ReadAsStringAsync().Result;
                var result  = ProductSearchResponse.FromJson(content);

                return(result);
            }
            else
            {
                throw new Exception("Viator API - ProductSearch: Api error response");
            }
        }
예제 #6
0
    public override async Task <GrpcResponse> GetProducts(ProductSearchRequest request, ServerCallContext context)
    {
        var grpcResponse = new GrpcResponse();
        var searchDto    = _mapper.Map <ProductSearchListDto>(request);
        var products     = await _productAppService.GetListAsync(searchDto);

        var replyProducts = products.IsNullOrEmpty()
                                        ? new List <ProductReply>()
                                        : _mapper.Map <List <ProductReply> >(products);

        var replyList = new ProductListReply();

        replyList.List.AddRange(replyProducts);
        grpcResponse.Content             = Any.Pack(replyList);
        grpcResponse.IsSuccessStatusCode = true;
        return(grpcResponse);
    }
예제 #7
0
        public ProductResponse GetAllProducts(ProductSearchRequest productSearchRequest)
        {
            int fromRow = (productSearchRequest.PageNo - 1) * productSearchRequest.PageSize;
            int toRow   = productSearchRequest.PageSize;

            Expression <Func <Product, bool> > query =
                s => (!productSearchRequest.CategoryId.HasValue || s.CategoryId == productSearchRequest.CategoryId) &&
                (string.IsNullOrEmpty(productSearchRequest.SearchString) || s.Name.Contains(productSearchRequest.SearchString));

            IEnumerable <Product> products = productSearchRequest.IsAsc ? DbSet.Where(query).Include("Category")
                                             .OrderBy(productClause[productSearchRequest.ProductOrderBy]).Skip(fromRow).Take(toRow).ToList()
                                            : DbSet.Where(query).Include("Category")
                                             .OrderByDescending(productClause[productSearchRequest.ProductOrderBy]).Skip(fromRow).Take(toRow).ToList();

            return(new ProductResponse {
                Products = products, TotalCount = DbSet.Count(query)
            });
        }
예제 #8
0
        public IActionResult Search([FromQuery] ProductSearchRequest filter)
        {
            ResultCode resultCode; QueryModel queryResult;

            (resultCode, queryResult) = _service.Search(filter);

            Result error; int statusCode;

            (statusCode, error) = ResultHandler.GetStatusCodeAndResult(resultCode);

            GeneralResponse response = new GeneralResponse
            {
                Result = queryResult,
                Error  = error,
            };

            return(StatusCode(statusCode, response));
        }
예제 #9
0
        public async Task <IActionResult> Index(ProductSearchRequest productSearch)
        {
            try
            {
                var model = await _productService.GetAllProductAsync();

                if (productSearch != null)
                {
                    model = await _productService.GetCustomerBySearchTermsAsync(productSearch);
                }
                return(View(model));
            }
            catch (ArgumentNullException)
            {
                var emptyList = new List <ProductResponse>();
                return(View(emptyList));
            }
        }
예제 #10
0
        public Task <List <TbkProductInfo> > Search(ProductSearchRequest request)
        {
            return(Task.Factory.StartNew(() =>
            {
                var tkjdResponse = new HttpUtils().DoGet <TaokeJidiDataResponse>(ConstantsUtils.TAOKEJIDI_SEARCH,
                                                                                 new Dictionary <string, string>()
                {
                    { "appkey", ConstantsUtils.TAOKEJIDI_KEY },
                    { "page", request.PageNo.ToString() },
                    { "keyword", request.KeyWord }
                });

                if (null != tkjdResponse && tkjdResponse.Data != null)
                {
                    return GetProductList(tkjdResponse.Data);
                }
                return new List <TbkProductInfo>();
            }));
        }
예제 #11
0
        public ActionResult Search([FromBody] ProductSearchRequest searchRequest)
        {
            if (searchRequest == null)
            {
                return(StatusCode(StatusCodes.Status400BadRequest, "Search request cannot be empty"));
            }

            try
            {
                var validator = new ProductSearchRequestValidator();

                var validationResult = validator.Validate(searchRequest);

                if (!validationResult.IsValid)
                {
                    string errorMessage = "";

                    foreach (var error in validationResult.Errors)
                    {
                        errorMessage += error.ErrorMessage + " ";
                    }

                    return(Conflict(errorMessage));
                }
            }
            catch (Exception e)
            {
                _logger.LogError($"Search products failed. Input data failed validation. Full validator exception message: {e.Message}");
                return(StatusCode(StatusCodes.Status500InternalServerError, "Internal server error"));
            }

            var blResult = _productService.Search(searchRequest);

            if (blResult.actionResult.ResultConnection != ServiceResult.ResultConnectionEnum.Correct)
            {
                _logger.LogError($"Product service error: {blResult.actionResult.Message}");
                return(StatusCode(StatusCodes.Status500InternalServerError, blResult.actionResult.Message));
            }


            return(Ok(blResult.products));
        }
예제 #12
0
        //
        // GET: /Product/Delete/5
        public ActionResult Delete(ProductSearchRequest request)
        {
            var product = productService.FindProduct(request.Id);

            try
            {
                productService.DeleteProduct(product);
                ProductViewModel productViewModel = GetData(request);

                if (Request.IsAjaxRequest())
                {
                    return(PartialView("_Product", productViewModel));
                }
            }
            catch
            {
                return(View());
            }
            return(null);
        }
예제 #13
0
        public IEnumerable <ShopifyProduct> Search(ProductSearchRequest request)
        {
            var store = _storeService.GetById(request.StoreId);

            if (store == null || store.Options.HasFlag(StoreOptions.Disabled))
            {
                throw new Exception("Store not found or disabled");
            }

            var productService = new ShopifyProductService(new ShopifySettings(store.Host, store.AccessToken));

            var products = productService.Filter(new ShopifyProductFilterRequest
            {
                Title           = request.Title,
                PublishedStatus = ShopifyPublishedStatus.Published,
                Page            = request.Page,
                Limit           = request.Limit
            });

            return(products);
        }
예제 #14
0
        public IEnumerable <Product> GetByCriteria(ProductSearchRequest request)
        {
            var products = _repository.GetAll();

            if (!string.IsNullOrWhiteSpace(request.Name))
            {
                products = products.Where(x => x.Name.ToLower().Contains(request.Name.ToLower()));
            }

            if (!string.IsNullOrWhiteSpace(request.Code))
            {
                products = products.Where(x => x.Code.ToLower().Contains(request.Code.ToLower()));
            }

            if (request.Category.HasValue)
            {
                products = products.Where(x => x.Category == request.Category);
            }

            return(products);
        }
예제 #15
0
        public async Task <List <ProductViewModel> > searchProduct(ProductSearchRequest request)
        {
            var data = _context.Products.AsQueryable();

            if (request.categoryId.Value != 0)
            {
                data = data.Where(ele => ele.categoryId == request.categoryId);
            }
            if (request.providerId.Value != 0)
            {
                data = data.Where(ele => ele.providerId == request.providerId);
            }
            if (!string.IsNullOrEmpty(request.searchKey.Trim()))
            {
                data = data.Where(ele => ele.name.ToLower()
                                  .Contains(request.searchKey.ToLower())
                                  );
            }


            return(await data.Where(i => i.status == ActionStatus.Display).Select(rs => new ProductViewModel
            {
                id = rs.id,
                name = rs.name,
                price = rs.price,
                importPrice = rs.importPrice,
                sale = rs.sale,
                categoryId = rs.categoryId,
                category = rs.category,
                color = rs.color,
                size = rs.size,
                description = rs.description,

                Images = rs.Images.Where(p => p.status == ActionStatus.Display).ToList(),
                rating = Convert.ToInt32(rs.Evaluations.Average(ave => ave.rating)),
                provider = rs.provider,
                providerId = rs.providerId,
                status = rs.status
            }).ToListAsync());
        }
예제 #16
0
        public async Task <ProductListResponse> List(ProductSearchRequest request)
        {
            var qing    = qingtaokeApiDataRepository.Search(request);
            var zhushou = taokeZhushouApiDataRepository.Search(request);
            var jidi    = taokeJidiApiDataRepository.Search(request);

            var datas = await Task.WhenAll(qing, zhushou, jidi).ContinueWith(task =>
            {
                List <TbkProductInfo> lstResult = new List <TbkProductInfo>();
                task.Result.ToList().ForEach(item =>
                {
                    if (item == null)
                    {
                        return;
                    }
                    lstResult.AddRange(item);
                });
                return(lstResult.Distinct(new ProductIdComparer()).Sort(request.Sort, false).ToList());
            });

            if (datas == null || datas.Count <= 0)
            {
                List <TbkProductInfo> lstTao = await sdkDataRepository.Search(request);

                if (null != lstTao)
                {
                    datas = lstTao;
                }
                else
                {
                    datas = new List <TbkProductInfo>();
                }
            }

            return(new ProductListResponse()
            {
                Datas = datas,
                Total = datas.Count
            });
        }
예제 #17
0
        private GetProductsByCategoryRequest GenerateProductSearchRequestFrom(ProductSearchRequest jsonProductSearchRequest)
        {
            GetProductsByCategoryRequest productSearchRequest = new GetProductsByCategoryRequest();

            productSearchRequest.NumberOfResultsPerPage = int.Parse(_configuration["NumberOfResultsPerPage"]);

            if (jsonProductSearchRequest != null)
            {
                productSearchRequest.Index      = jsonProductSearchRequest.Index;
                productSearchRequest.CategoryId = jsonProductSearchRequest.CategoryId;
                productSearchRequest.SortBy     = jsonProductSearchRequest.SortBy;

                foreach (var jsonRefinementGroup in jsonProductSearchRequest.RefinementGroups)
                {
                    switch ((RefinementGroupings)jsonRefinementGroup.GroupId)
                    {
                    case RefinementGroupings.Brand:
                        productSearchRequest.BrandIds = jsonRefinementGroup.SelectedRefinements;

                        break;

                    case RefinementGroupings.Color:
                        productSearchRequest.ColorIds = jsonRefinementGroup.SelectedRefinements;

                        break;

                    case RefinementGroupings.Size:
                        productSearchRequest.SizeIds = jsonRefinementGroup.SelectedRefinements;

                        break;

                    default:
                        break;
                    }
                }
            }

            return(productSearchRequest);
        }
        public async Task <List <Model.Models.Product> > Get(ProductSearchRequest request)
        {
            var products = _context.Product.AsQueryable().Where(x => x.Active == true);

            if (request.Page != -1)
            {
                products = products
                           .Skip((request.Page - 1) * request.ItemsPerPage)
                           .Take(request.ItemsPerPage);
            }

            var result = _mapper.Map <List <Model.Models.Product> >(products);

            foreach (var product in result)
            {
                var directory = Path.Combine(Directory.GetCurrentDirectory(), "Data", "Images", "Products", $"{product.ImageLocation}");

                product.Image = await FindImage(directory);

                product.Price = Math.Round(product.Price, 2);
            }
            return(result);
        }
        //page_size
        /// <summary>
        /// 产品搜索
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public Task <List <TbkProductInfo> > Search(ProductSearchRequest request)
        {
            return(Task.Factory.StartNew(() =>
            {
                var reqParams = new Dictionary <string, string>()
                {
                    { "app_key", ConstantsUtils.QINGTAOKE_APP_KEY },
                    { "page", request.PageNo.ToString() },
                    { "key_word", request.KeyWord }
                };
                switch (request.Sort)
                {
                case 0:
                    reqParams.Add("sort", "1");
                    break;

                case 1:
                    reqParams.Add("sort", "3");
                    break;

                case 2:
                    reqParams.Add("sort", "4");
                    break;

                case 3:
                    reqParams.Add("sort", "5");
                    break;
                }
                var qtkResponse = new HttpUtils().DoGet <QingtaokeSearchResponse>(ConstantsUtils.QINGTAOKE_SEARCH, reqParams);

                if (qtkResponse != null && qtkResponse.Data != null && qtkResponse.Data.List?.Length >= 1)
                {
                    return GetProductList(qtkResponse.Data.List);
                }
                return new List <TbkProductInfo>();
            }));
        }
        public async Task <IActionResult> search([FromBody] ProductSearchRequest request)
        {
            var data = await _manageProductService.searchProduct(request);

            return(Ok(data));
        }
예제 #21
0
        public async Task <IEnumerable <ProductResponse> > GetCustomerBySearchTermsAsync(ProductSearchRequest searchRequest)
        {
            var searchFilter = Mapper.Map <Product>(searchRequest);
            var product      = await _unitOfWork.Products.GetProductBySearchTermsAsync(searchFilter);

            _nullCheckMethod.CheckIfResponseListIsEmpty(product);

            var response = Mapper.Map <IEnumerable <ProductResponse> >(product);

            return(response);
        }
예제 #22
0
 public IHttpActionResult Search([FromUri] ProductSearchRequest request)
 {
     return(Ok(_productService.Search(request)));
 }
예제 #23
0
 public async Task <List <Model.Models.Product> > Get([FromQuery] ProductSearchRequest request)
 {
     return(await _service.Get(request));
 }
        public Task <List <TbkProductInfo> > Search(ProductSearchRequest request)
        {
            return(Task.Factory.StartNew(() =>
            {
                var dicParams = new Dictionary <string, string>()
                {
                    { "app_key", ConstantsUtils.TAOKEZHUSHOU_KEY },
                    { "page", request.PageNo.ToString() }
                };
                if (!string.IsNullOrWhiteSpace(request.KeyWord))
                {
                    dicParams.Add("q", request.KeyWord);
                }
                if (request.TodayNew >= 1)
                {
                    dicParams.Add("today", "1");
                }
                if (request.Juhuasuan == 1)
                {
                    dicParams.Add("juhuasuan", "1");
                }
                if (request.Taoqianggou == 1)
                {
                    dicParams.Add("taoqianggou", "1");
                }
                if (request.Haitao == 1)
                {
                    dicParams.Add("haitao", "1");
                }
                if (request.MinPrice > 0)
                {
                    dicParams.Add("price_start", request.MinPrice.ToString());
                }
                if (request.MaxPrice > 0)
                {
                    dicParams.Add("price_end", request.MaxPrice.ToString());
                }
                if (request.Cat >= 0)
                {
                    dicParams.Add("cate_id", request.Cat.ToString());
                }
                if (request.Tmall == 1)
                {
                    dicParams.Add("is_tmall", request.Tmall.ToString());
                }
                switch (request.Sort)
                {
                case 0:
                    dicParams.Add("sort", "one_day_sale_num");
                    break;

                case 1:
                    dicParams.Add("sort", "sale_num");
                    break;

                case 2:
                    dicParams.Add("sort", "price_asc");
                    break;

                case 3:
                    dicParams.Add("sort", "commission_rate_desc");
                    break;
                }
                var dtkResponse = new HttpUtils().DoGet <TaokeZhushouDataResponse>(ConstantsUtils.TAOKEZHUSHOU_SEARCH, dicParams);
                if (null != dtkResponse && dtkResponse.Data != null)
                {
                    return GetProductList(dtkResponse.Data);
                }
                return new List <TbkProductInfo>();
            }));
        }
 public object GetBySearchStringAndProperties([FromQuery] string query, [FromQuery] int from,
                                              [FromQuery] int size, [FromQuery] string lang, [FromBody] ProductSearchRequest requestBody)
 {
     if (requestBody == null)
     {
         requestBody = new ProductSearchRequest();
     }
     return(_productQueryService.FindByStringAndProperty(query, string.IsNullOrEmpty(lang) ? "default" :
                                                         lang, from, size == 0 ? 10 : size, requestBody.StringProperties, requestBody.NumericProperties, requestBody.Category, requestBody.StringAggregations, requestBody.NumericAggregations));
 }
        public IHttpActionResult Search([FromUri] ProductSearchRequest request)
        {
            request = request ?? new ProductSearchRequest();
            request.Normalize();

            var context = new Dictionary <string, object>
            {
                { "StoreId", request.Store },
            };

            var fullLoadedStore = GetStoreById(request.Store);

            if (fullLoadedStore == null)
            {
                throw new NullReferenceException(request.Store + " not found");
            }

            var catalog = fullLoadedStore.Catalog;

            string categoryId = null;

            var criteria = new CatalogIndexedSearchCriteria {
                Locale = request.Language, Catalog = catalog.ToLowerInvariant(), IsFuzzySearch = true
            };

            if (!string.IsNullOrWhiteSpace(request.Outline))
            {
                criteria.Outlines.Add(string.Format("{0}/{1}*", catalog, request.Outline));
                categoryId = request.Outline.Split(new[] { '/' }).Last();
                context.Add("CategoryId", categoryId);
            }

            #region Filters
            // Now fill in filters
            var filters = _browseFilterService.GetFilters(context);

            // Add all filters
            foreach (var filter in filters)
            {
                criteria.Add(filter);
            }

            // apply terms
            var terms = ParseKeyValues(request.Terms);
            if (terms.Any())
            {
                var filtersWithValues = filters
                                        .Where(x => (!(x is PriceRangeFilter) || ((PriceRangeFilter)x).Currency.Equals(request.Currency, StringComparison.OrdinalIgnoreCase)))
                                        .Select(x => new { Filter = x, Values = x.GetValues() })
                                        .ToList();

                foreach (var term in terms)
                {
                    var filter = filters.SingleOrDefault(x => x.Key.Equals(term.Key, StringComparison.OrdinalIgnoreCase) &&
                                                         (!(x is PriceRangeFilter) || ((PriceRangeFilter)x).Currency.Equals(request.Currency, StringComparison.OrdinalIgnoreCase)));

                    // handle special filter term with a key = "tags", it contains just values and we need to determine which filter to use
                    if (filter == null && term.Key == "tags")
                    {
                        foreach (var termValue in term.Values)
                        {
                            // try to find filter by value
                            var foundFilter = filtersWithValues.FirstOrDefault(x => x.Values.Any(y => y.Id.Equals(termValue)));

                            if (foundFilter != null)
                            {
                                filter = foundFilter.Filter;

                                var appliedFilter = _browseFilterService.Convert(filter, term.Values);
                                criteria.Apply(appliedFilter);
                            }
                        }
                    }
                    else
                    {
                        var appliedFilter = _browseFilterService.Convert(filter, term.Values);
                        criteria.Apply(appliedFilter);
                    }
                }
            }
            #endregion

            #region Facets
            // apply facet filters
            var facets = ParseKeyValues(request.Facets);
            foreach (var facet in facets)
            {
                var filter = filters.SingleOrDefault(
                    x => x.Key.Equals(facet.Key, StringComparison.OrdinalIgnoreCase) &&
                    (!(x is PriceRangeFilter) ||
                     ((PriceRangeFilter)x).Currency.Equals(request.Currency, StringComparison.OrdinalIgnoreCase)));

                var appliedFilter = _browseFilterService.Convert(filter, facet.Values);
                criteria.Apply(appliedFilter);
            }
            #endregion

            //criteria.ClassTypes.Add("Product");
            criteria.RecordsToRetrieve = request.Take <= 0 ? 10 : request.Take;
            criteria.StartingRecord    = request.Skip;
            criteria.Pricelists        = request.Pricelists;
            criteria.Currency          = request.Currency;
            criteria.StartDateFrom     = request.StartDateFrom;
            criteria.SearchPhrase      = request.SearchPhrase;

            #region sorting

            if (!string.IsNullOrEmpty(request.Sort))
            {
                var isDescending = "desc".Equals(request.SortOrder, StringComparison.OrdinalIgnoreCase);

                SearchSort sortObject = null;

                switch (request.Sort.ToLowerInvariant())
                {
                case "price":
                    if (criteria.Pricelists != null)
                    {
                        sortObject = new SearchSort(
                            criteria.Pricelists.Select(
                                priceList =>
                                new SearchSortField(String.Format("price_{0}_{1}", criteria.Currency.ToLower(), priceList.ToLower()))
                        {
                            IgnoredUnmapped = true,
                            IsDescending    = isDescending,
                            DataType        = SearchSortField.DOUBLE
                        })
                            .ToArray());
                    }
                    break;

                case "position":
                    sortObject =
                        new SearchSort(
                            new SearchSortField(string.Format("sort{0}{1}", catalog, categoryId).ToLower())
                    {
                        IgnoredUnmapped = true,
                        IsDescending    = isDescending
                    });
                    break;

                case "name":
                    sortObject = new SearchSort("name", isDescending);
                    break;

                case "rating":
                    sortObject = new SearchSort(criteria.ReviewsAverageField, isDescending);
                    break;

                case "reviews":
                    sortObject = new SearchSort(criteria.ReviewsTotalField, isDescending);
                    break;

                default:
                    sortObject = CatalogIndexedSearchCriteria.DefaultSortOrder;
                    break;
                }

                criteria.Sort = sortObject;
            }

            #endregion

            //Load ALL products
            var searchResults = _browseService.SearchItems(criteria, request.ResponseGroup);

            // populate inventory
            if ((request.ResponseGroup & ItemResponseGroup.ItemProperties) == ItemResponseGroup.ItemProperties)
            {
                PopulateInventory(fullLoadedStore.FulfillmentCenter, searchResults.Items);
            }

            return(Ok(searchResults));
        }
        public async Task <IViewComponentResult> InvokeAsync()
        {
            var productSearch = new ProductSearchRequest();

            return(View("ProductSearch", productSearch));
        }
        public async Task <ResponseDTO <PagedList <ProductResponse> > > Search(ProductSearchRequest search)
        {
            var resp = await _productsApplicationService.SearchProductsByNameAsync(search);

            return(resp);
        }
예제 #29
0
 public ProductResponse LoadAllProducts(ProductSearchRequest productSearchRequest)
 {
     return(productRepository.GetAllProducts(productSearchRequest));
 }
예제 #30
0
        public (ServiceResult actionResult, IEnumerable <Product> products) Search(ProductSearchRequest searchRequest)
        {
            var allList = _dbContext.Products.SelectAll();

            if (allList == null)
            {
                return(new ServiceResult(ServiceResult.ResultConnectionEnum.SystemError, ""), null);
            }


            bool searchStatus;
            bool searchCost;
            bool searchParameter;
            bool searchCategory;

            List <ProductStatus> productStatuses = new List <ProductStatus>();

            #region Search parameters init

            try
            {
                foreach (string productStatus in searchRequest.ProductStatuses)
                {
                    var status = new ProductStatus(productStatus);
                    productStatuses.Add(status);
                }

                searchStatus = true;
            }
            catch
            {
                productStatuses = null;
                searchStatus    = false;
            }

            if (searchRequest.MinCost != 0 || searchRequest.MaxCost != 0)
            {
                searchCost = true;
            }
            else
            {
                searchCost = false;
            }

            if (!string.IsNullOrEmpty(searchRequest.ProductSearch))
            {
                searchParameter = true;
            }
            else
            {
                searchParameter = false;
            }


            if (searchRequest.IdProductCategories != null && searchRequest.IdProductCategories.Count() != 0)
            {
                searchCategory = true;
            }
            else
            {
                searchCategory = false;
            }

            #endregion

            #region Search in the list


            var listResult = new List <Product>();

            foreach (Product product in allList)
            {
                #region Status check


                if (searchStatus)
                {
                    bool statusCheck = false;

                    foreach (ProductStatus productStatus in productStatuses)
                    {
                        if (product.ProductStatus.Status == productStatus.Status)
                        {
                            statusCheck = true;
                        }
                    }

                    if (!statusCheck)
                    {
                        continue;
                    }
                }

                #endregion

                #region Price check

                if (searchCost)
                {
                    if (product.Price > searchRequest.MaxCost || product.Price < searchRequest.MinCost)
                    {
                        continue;
                    }
                }

                #endregion

                #region Search string check

                if (searchParameter)
                {
                    if (!product.ProductInformation.ProductName.ToLower().Contains(searchRequest.ProductSearch.ToLower()) &&
                        !product.ProductInformation.Description.ToLower().Contains(searchRequest.ProductSearch.ToLower()))
                    {
                        continue;
                    }
                }

                #endregion

                #region Product category check


                if (searchCategory)
                {
                    bool containCategories = true;

                    foreach (int idSearchCategory in searchRequest.IdProductCategories)
                    {
                        bool containCategory = false;
                        foreach (ProductCategory productCategory in product.ProductInformation.ProductCategories)
                        {
                            // ReSharper disable once PossibleInvalidOperationException
                            if (productCategory.IdEntity.Value == idSearchCategory)
                            {
                                containCategory = true;
                            }
                        }

                        if (!containCategory)
                        {
                            containCategories = false;
                            break;
                        }
                    }

                    if (!containCategories)
                    {
                        continue;
                    }
                }

                #endregion

                listResult.Add(product);
            }

            #endregion

            ServiceResult resultCorrect = new ServiceResult(ServiceResult.ResultConnectionEnum.Correct, "");
            return(resultCorrect, listResult);
        }
예제 #31
0
        public async Task <ResponseDTO <PagedList <ProductDTO> > > SearchProductsByNameAsync(ProductSearchRequest search)
        {
            List <OrderExpression <ProductDTO> > orderExpressionList = new List <OrderExpression <ProductDTO> >();

            orderExpressionList.Add(new OrderExpression <ProductDTO>(OrderType.Asc, p => p.Name));

            Expression <Func <ProductDTO, bool> > queryFilter = c => c.RowStatus == true;

            if (!string.IsNullOrEmpty(search.Code))
            {
                queryFilter = queryFilter.And(p => p.Code.Contains(search.Code));
            }

            if (!string.IsNullOrEmpty(search.Name))
            {
                queryFilter = queryFilter.And(p => p.Name.Contains(search.Name));
            }

            if (!string.IsNullOrEmpty(search.ShortName))
            {
                queryFilter = queryFilter.And(p => p.ShortName.Contains(search.ShortName));
            }

            if (!string.IsNullOrEmpty(search.IsHazardous))
            {
                queryFilter = queryFilter.And(p => p.IsHazardous.Contains(search.IsHazardous));
            }

            var product = await _productDataAcces.ListPagedAsync(queryFilter, search.Page, search.PageSize, orderExpressionList.ToArray());

            var pagedResult = new PagedList <ProductDTO>()
            {
                Items    = product.Items,
                PageSize = product.PageSize,
                Page     = product.Page,
                Total    = product.Total
            };

            return(ResponseBuilder.Correct(pagedResult));
        }