diff options
| author | Rafi Zadanly <zadanlyr@gmail.com> | 2023-04-10 09:57:16 +0700 |
|---|---|---|
| committer | Rafi Zadanly <zadanlyr@gmail.com> | 2023-04-10 09:57:16 +0700 |
| commit | 4a05c21f583e1482acb126d51aafe5cbce49707f (patch) | |
| tree | 8129f4aa6963a0a291eed620382f98e2d38c061b /src/pages/api | |
| parent | 4b25b3e36c459b34f075550ca6e61b1d8f2643ce (diff) | |
fix bug cart and search
Diffstat (limited to 'src/pages/api')
| -rw-r--r-- | src/pages/api/shop/search.js | 80 |
1 files changed, 43 insertions, 37 deletions
diff --git a/src/pages/api/shop/search.js b/src/pages/api/shop/search.js index 53355e77..ef070dcd 100644 --- a/src/pages/api/shop/search.js +++ b/src/pages/api/shop/search.js @@ -1,42 +1,6 @@ import axios from 'axios' import camelcaseObjectDeep from 'camelcase-object-deep' -const productResponseMap = (products) => { - return products.map((product) => { - let productMapped = { - id: product.product_id_i || '', - image: product.image_s || '', - code: product.default_code_s || '', - name: product.name_s || '', - lowestPrice: { - price: product.price_f || 0, - priceDiscount: product.price_discount_f || 0, - discountPercentage: product.discount_f || 0 - }, - variantTotal: product.variant_total_i || 0, - stockTotal: product.stock_total_f || 0, - weight: product.weight_f || 0, - manufacture: {}, - categories: [] - } - - if (product.manufacture_id_i && product.manufacture_name_s) { - productMapped.manufacture = { - id: product.manufacture_id_i || '', - name: product.manufacture_name_s || '' - } - } - - productMapped.categories = [ - { - id: product.category_id_i || '', - name: product.category_name_s || '' - } - ] - return productMapped - }) -} - export default async function handler(req, res) { const { q = '*', @@ -75,7 +39,7 @@ export default async function handler(req, res) { 'indent=true', `facet.query=${q}`, `q.op=${operation}`, - `q=${q}`, + `q=${escapeSolrQuery(q)}`, `start=${offset}`, `rows=${limit}`, `sort=product_rating_f DESC ${paramOrderBy}`, @@ -102,3 +66,45 @@ export default async function handler(req, res) { res.status(400).json({ error: error.message }) } } + +const escapeSolrQuery = (query) => { + const specialChars = /[\]\[{}()"\\]/g + const escapedQuery = query.replace(specialChars, '\\$&') + return escapedQuery +} + +const productResponseMap = (products) => { + return products.map((product) => { + let productMapped = { + id: product.product_id_i || '', + image: product.image_s || '', + code: product.default_code_s || '', + name: product.name_s || '', + lowestPrice: { + price: product.price_f || 0, + priceDiscount: product.price_discount_f || 0, + discountPercentage: product.discount_f || 0 + }, + variantTotal: product.variant_total_i || 0, + stockTotal: product.stock_total_f || 0, + weight: product.weight_f || 0, + manufacture: {}, + categories: [] + } + + if (product.manufacture_id_i && product.manufacture_name_s) { + productMapped.manufacture = { + id: product.manufacture_id_i || '', + name: product.manufacture_name_s || '' + } + } + + productMapped.categories = [ + { + id: product.category_id_i || '', + name: product.category_name_s || '' + } + ] + return productMapped + }) +} |
