summaryrefslogtreecommitdiff
path: root/src/pages/api/shop
diff options
context:
space:
mode:
authorRafi Zadanly <zadanlyr@gmail.com>2023-02-17 17:07:50 +0700
committerRafi Zadanly <zadanlyr@gmail.com>2023-02-17 17:07:50 +0700
commitf99e0aba70efad0deb907d8e27f09fc9f527c8a4 (patch)
treef0ac96e4e736a1d385e32553f0e641ee27e11fd3 /src/pages/api/shop
parent90e1edab9b6a8ccc09a49fed3addbec2cbc4e4c3 (diff)
Refactor
Diffstat (limited to 'src/pages/api/shop')
-rw-r--r--src/pages/api/shop/search.js80
-rw-r--r--src/pages/api/shop/suggest.js9
2 files changed, 47 insertions, 42 deletions
diff --git a/src/pages/api/shop/search.js b/src/pages/api/shop/search.js
index ad986c86..5e5f1b6a 100644
--- a/src/pages/api/shop/search.js
+++ b/src/pages/api/shop/search.js
@@ -1,4 +1,5 @@
-import axios from "axios";
+import axios from "axios"
+import camelcaseObjectDeep from "camelcase-object-deep"
const productResponseMap = (products) => {
return products.map((product) => {
@@ -7,23 +8,23 @@ const productResponseMap = (products) => {
image: product.image ? product.image[0] : '',
code: product.default_code ? product.default_code[0] : '',
name: product.product_name ? product.product_name[0] : '',
- lowest_price: {
+ lowestPrice: {
price: product.price ? product.price[0] : 0,
- price_discount: product.price_discount ? product.price_discount[0] : 0,
- discount_percentage: product.discount ? product.discount[0] : 0,
+ priceDiscount: product.price_discount ? product.price_discount[0] : 0,
+ discountPercentage: product.discount ? product.discount[0] : 0,
},
- variant_total: product.variant_total ? product.variant_total[0] : 0,
- stock_total: product.stock_total ? product.stock_total[0] : 0,
+ variantTotal: product.variant_total ? product.variant_total[0] : 0,
+ stockTotal: product.stock_total ? product.stock_total[0] : 0,
weight: product.weight ? product.weight[0] : 0,
manufacture: {},
categories: [],
- };
+ }
if (product.manufacture_id && product.brand) {
productMapped.manufacture = {
id: product.manufacture_id ? product.manufacture_id[0] : '',
name: product.brand ? product.brand[0] : '',
- };
+ }
}
productMapped.categories = [
@@ -31,41 +32,41 @@ const productResponseMap = (products) => {
id: product.category_id ? product.category_id[0] : '',
name: product.category_name ? product.category_name[0] : '',
}
- ];
+ ]
- return productMapped;
- });
+ return productMapped
+ })
}
export default async function handler(req, res) {
const {
- q,
+ q = '*',
page = 1,
brand = '',
category = '',
- price_from = 0,
- price_to = 0,
- order_by = ''
- } = req.query;
+ priceFrom = 0,
+ priceTo = 0,
+ orderBy = ''
+ } = req.query
- let paramOrderBy = '';
- switch (order_by) {
+ let paramOrderBy = ''
+ switch (orderBy) {
case 'price-asc':
- paramOrderBy = ', price_discount ASC';
- break;
+ paramOrderBy = ', price_discount ASC'
+ break
case 'price-desc':
- paramOrderBy = ', price_discount DESC';
- break;
+ paramOrderBy = ', price_discount DESC'
+ break
case 'popular':
- paramOrderBy = ', search_rank DESC';
- break;
+ paramOrderBy = ', search_rank DESC'
+ break
case 'stock':
- paramOrderBy = ', stock_total DESC';
- break;
+ paramOrderBy = ', stock_total DESC'
+ break
}
- let limit = 30;
- let offset = (page - 1) * limit;
+ let limit = 30
+ let offset = (page - 1) * limit
let parameter = [
`facet.query=${q}`,
'facet=true',
@@ -77,20 +78,21 @@ export default async function handler(req, res) {
`start=${offset}`,
`rows=${limit}`,
`sort=product_rating DESC ${paramOrderBy}`,
- `fq=price_discount:[${price_from == '' ? '*' : price_from} TO ${price_to == '' ? '*' : price_to}]`
- ];
+ `fq=price_discount:[${priceFrom == '' ? '*' : priceFrom} TO ${priceTo == '' ? '*' : priceTo}]`
+ ]
- if (brand) parameter.push(`fq=brand:${brand}`);
- if (category) parameter.push(`fq=category_name:${category}`);
+ if (brand) parameter.push(`fq=brand:${brand}`)
+ if (category) parameter.push(`fq=category_name:${category}`)
- let result = await axios(process.env.SOLR_HOST + '/solr/products/select?' + parameter.join('&'));
+ let result = await axios(process.env.SOLR_HOST + '/solr/products/select?' + parameter.join('&'))
try {
- result.data.response.products = productResponseMap(result.data.response.docs);
- result.data.responseHeader.params.start = parseInt(result.data.responseHeader.params.start);
- result.data.responseHeader.params.rows = parseInt(result.data.responseHeader.params.rows);
- delete result.data.response.docs;
- res.status(200).json(result.data);
+ result.data.response.products = productResponseMap(result.data.response.docs)
+ result.data.responseHeader.params.start = parseInt(result.data.responseHeader.params.start)
+ result.data.responseHeader.params.rows = parseInt(result.data.responseHeader.params.rows)
+ delete result.data.response.docs
+ result.data = camelcaseObjectDeep(result.data)
+ res.status(200).json(result.data)
} catch (error) {
- res.status(400).json({ error: error.message });
+ res.status(400).json({ error: error.message })
}
} \ No newline at end of file
diff --git a/src/pages/api/shop/suggest.js b/src/pages/api/shop/suggest.js
index 6db1a851..4e373a92 100644
--- a/src/pages/api/shop/suggest.js
+++ b/src/pages/api/shop/suggest.js
@@ -1,12 +1,15 @@
import axios from "axios";
export default async function handler(req, res) {
- const { q } = req.query;
+ const { q = '' } = req.query;
let result = await axios(process.env.SOLR_HOST + `/solr/products/suggest?suggest=true&suggest.dictionary=mySuggester&suggest.q=${q}`);
try {
- res.status(200).json(result.data);
+ res.status(200).json(result.data.suggest.mySuggester[q]);
} catch (error) {
- res.status(400).json({ error: error.message });
+ res.status(400).json({
+ numFound: 0,
+ suggestions: []
+ });
}
} \ No newline at end of file