import axios from "axios"; const productResponseMap = (products) => { return products.map((product) => { let productMapped = { id: product.product_id ? product.product_id[0] : '', image: product.image ? product.image[0] : '', code: product.default_code ? product.default_code[0] : '', name: product.product_name ? product.product_name[0] : '', lowest_price: { 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, }, variant_total: product.variant_total ? product.variant_total[0] : 0, stock_total: 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 = [ { id: product.category_id ? product.category_id[0] : '', name: product.category_name ? product.category_name[0] : '', } ]; return productMapped; }); } export default async function handler(req, res) { const { q, page = 1, brand = '', category = '', price_from = 0, price_to = 0, order_by = '' } = req.query; let paramOrderBy = ''; switch (order_by) { case 'price-asc': paramOrderBy = ', price_discount ASC'; break; case 'price-desc': paramOrderBy = ', price_discount DESC'; break; case 'popular': paramOrderBy = ', search_rank DESC'; break; case 'stock': paramOrderBy = ', stock_total DESC'; break; } let limit = 30; let offset = (page - 1) * limit; let parameter = [ `facet.query=${q}`, 'facet=true', 'indent=true', 'q.op=AND', `q=${q}`, 'facet.field=brand_str', 'facet.field=category_name_str', `start=${offset}`, `rows=${limit}`, `sort=product_rating DESC ${paramOrderBy}`, `fq=price_discount:[${price_from == '' ? '*' : price_from} TO ${price_to == '' ? '*' : price_to}]` ]; 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('&')); 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); } catch (error) { res.status(400).json({ error: error.message }); } }