From bf805f7da68891250a10d85d9206607de3cbfacf Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Mon, 2 Sep 2024 13:24:07 +0700 Subject: temp save update fetch data promotion program line --- src/pages/api/shop/promo.js | 205 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 205 insertions(+) create mode 100644 src/pages/api/shop/promo.js (limited to 'src/pages/api') diff --git a/src/pages/api/shop/promo.js b/src/pages/api/shop/promo.js new file mode 100644 index 00000000..4b4c09b7 --- /dev/null +++ b/src/pages/api/shop/promo.js @@ -0,0 +1,205 @@ +import { map } from '@/utils/solrMapping'; +import axios from 'axios'; +import camelcaseObjectDeep from 'camelcase-object-deep'; + +export default async function handler(req, res) { + console.log("req_iman",req) + const { + q = '*', + page = 1, + brand = '', + category = '', + priceFrom = 0, + priceTo = 0, + orderBy = '', + operation = 'AND', + fq = '', + limit = 30, + } = req.query; + + let { stock = '' } = req.query; + + let paramOrderBy = ''; + switch (orderBy) { + case 'price-asc': + paramOrderBy += 'price_tier1_v2_f ASC'; + break; + case 'price-desc': + paramOrderBy += 'price_tier1_v2_f DESC'; + break; + case 'popular': + paramOrderBy += 'product_rating_f DESC, search_rank_i DESC,'; + break; + case 'popular-weekly': + paramOrderBy += 'search_rank_weekly_i DESC'; + break; + case 'stock': + paramOrderBy += 'product_rating_f DESC, stock_total_f DESC'; + break; + case 'flashsale-price-asc': + paramOrderBy += 'flashsale_price_f ASC'; + break; + default: + paramOrderBy += ''; + break; + } + + let checkQ = q.trim().split(/[\s\+\-\!\(\)\{\}\[\]\^"~\*\?:\\\/]+/); + let newQ = checkQ.length > 1 ? escapeSolrQuery(q) + '*' : escapeSolrQuery(q); + + let offset = (page - 1) * limit; + let parameter = [ + // 'facet.field=manufacture_name_s', + // 'facet.field=category_name', + 'facet=true', + 'indent=true', + // `facet.query=${escapeSolrQuery(q)}`, + `q.op=${operation}`, + `q=${newQ}`, + // 'qf=name_s', + `start=${parseInt(offset)}`, + `rows=${limit}`, + `sort=${paramOrderBy}`, + // `fq=-publish_b:false, product_rating_f:[8 TO *], price_tier1_v2_f:[1 TO *]`, + ]; + + if (priceFrom > 0 || priceTo > 0) { + parameter.push( + `fq=price_tier1_v2_f:[${priceFrom == '' ? '*' : priceFrom} TO ${ + priceTo == '' ? '*' : priceTo + }]` + ); + } + + let { auth } = req.cookies; + if (auth) { + auth = JSON.parse(auth); + if (auth.feature.onlyReadyStock) stock = true; + } + + if (brand) + parameter.push( + `fq=${brand + .split(',') + .map( + (manufacturer) => + `manufacture_name:"${encodeURIComponent(manufacturer)}"` + ) + .join(' OR ')}` + ); + if (category) + parameter.push( + `fq=${category + .split(',') + .map((cat) => `category_name:"${encodeURIComponent(cat)}"`) + .join(' OR ')}` + ); + // if (category) parameter.push(`fq=category_name:${capitalizeFirstLetter(category.replace(/,/g, ' OR '))}`) + if (stock) parameter.push(`fq=stock_total_f:{1 TO *}`); + + // Single fq in url params + if (typeof fq === 'string') parameter.push(`fq=${fq}`); + // Multi fq in url params + if (Array.isArray(fq)) + parameter = parameter.concat(fq.map((val) => `fq=${val}`)); + + console.log("parameter",parameter) + + let result = await axios( + process.env.SOLR_HOST + '/solr/promotion_program_lines/select?' + parameter.join('&') + ); + console.log("result",result) + try { + result.data.response.products = map( + result.data.response.docs, + auth?.pricelist || false + ); + 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 }); + } +} + +const escapeSolrQuery = (query) => { + if (query == '*') return query; + + query = query.replace(/-/g, ' '); + + const specialChars = /([\+\!\(\)\{\}\[\]\^"~\*\?:\\\/])/g; + const words = query.split(/\s+/); + const escapedWords = words.map((word) => { + if (specialChars.test(word)) { + return word.replace(specialChars, '\\$1'); + } + return word; + }); + + return escapedWords.join(' '); +}; + + +/*const productResponseMap = (products, pricelist) => { + return products.map((product) => { + let price = product.price_tier1_v2_f || 0 + let priceDiscount = product.price_discount_f || 0 + let discountPercentage = product.discount_f || 0 + + if (pricelist) { + // const pricelistDiscount = product?.[`price_${pricelist}_f`] || false + // const pricelistDiscountPerc = product?.[`discount_${pricelist}_f`] || false + + // if (pricelistDiscount && pricelistDiscount > 0) priceDiscount = pricelistDiscount + // if (pricelistDiscountPerc && pricelistDiscountPerc > 0) + // discountPercentage = pricelistDiscountPerc + + price = product?.[`price_${pricelist}_f`] || 0 + } + + if (product?.flashsale_id_i > 0) { + price = product?.flashsale_base_price_f || 0 + priceDiscount = product?.flashsale_price_f || 0 + discountPercentage = product?.flashsale_discount_f || 0 + } + + let productMapped = { + id: product.product_id_i || '', + image: product.image_s || '', + code: product.default_code_s || '', + name: product.name_s || '', + lowestPrice: { price, priceDiscount, discountPercentage }, + variantTotal: product.variant_total_i || 0, + stockTotal: product.stock_total_f || 0, + weight: product.weight_f || 0, + manufacture: {}, + categories: [], + flashSale: { + id: product?.flashsale_id_i, + name: product?.product?.flashsale_name_s, + tag : product?.flashsale_tag_s || 'FLASH SALE' + } + } + + 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 + }) +}*/ -- cgit v1.2.3 From 3f384749fe51a2763e7e99351f36ce70954afb7a Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Mon, 2 Sep 2024 14:40:34 +0700 Subject: temp save --- src/pages/api/shop/promo.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'src/pages/api') diff --git a/src/pages/api/shop/promo.js b/src/pages/api/shop/promo.js index 4b4c09b7..353ff3df 100644 --- a/src/pages/api/shop/promo.js +++ b/src/pages/api/shop/promo.js @@ -1,4 +1,4 @@ -import { map } from '@/utils/solrMapping'; +import { productMappingSolr, promoMappingSolr } from '@/utils/solrMapping'; import axios from 'axios'; import camelcaseObjectDeep from 'camelcase-object-deep'; @@ -55,7 +55,7 @@ export default async function handler(req, res) { 'indent=true', // `facet.query=${escapeSolrQuery(q)}`, `q.op=${operation}`, - `q=${newQ}`, + `q=${q}`, // 'qf=name_s', `start=${parseInt(offset)}`, `rows=${limit}`, @@ -110,7 +110,7 @@ export default async function handler(req, res) { ); console.log("result",result) try { - result.data.response.products = map( + result.data.response.products = promoMappingSolr( result.data.response.docs, auth?.pricelist || false ); @@ -121,6 +121,7 @@ export default async function handler(req, res) { result.data.responseHeader.params.rows ); delete result.data.response.docs; + console.log("result.data",result.data) result.data = camelcaseObjectDeep(result.data); res.status(200).json(result.data); } catch (error) { -- cgit v1.2.3 From b30e6a53d660f9ccbc0ded640c2a1dc5df673ff2 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Mon, 2 Sep 2024 16:43:25 +0700 Subject: update fetch data --- src/pages/api/shop/promo.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/pages/api') diff --git a/src/pages/api/shop/promo.js b/src/pages/api/shop/promo.js index 353ff3df..e6867e89 100644 --- a/src/pages/api/shop/promo.js +++ b/src/pages/api/shop/promo.js @@ -108,12 +108,12 @@ export default async function handler(req, res) { let result = await axios( process.env.SOLR_HOST + '/solr/promotion_program_lines/select?' + parameter.join('&') ); - console.log("result",result) try { result.data.response.products = promoMappingSolr( - result.data.response.docs, - auth?.pricelist || false + result.data.response.docs ); + console.log("result.data.response.products",result.data.response.products) + result.data.responseHeader.params.start = parseInt( result.data.responseHeader.params.start ); -- cgit v1.2.3 From 68ec9564aef424b86702512637c9cb738b44f215 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Mon, 2 Sep 2024 17:11:10 +0700 Subject: update search --- src/pages/api/shop/promo.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/pages/api') diff --git a/src/pages/api/shop/promo.js b/src/pages/api/shop/promo.js index e6867e89..61fff4e5 100644 --- a/src/pages/api/shop/promo.js +++ b/src/pages/api/shop/promo.js @@ -122,7 +122,8 @@ export default async function handler(req, res) { ); delete result.data.response.docs; console.log("result.data",result.data) - result.data = camelcaseObjectDeep(result.data); + // result.data = camelcaseObjectDeep(result.data); + result.data = result.data; res.status(200).json(result.data); } catch (error) { res.status(400).json({ error: error.message }); -- cgit v1.2.3 From 105ffc8cfa4d8efd51bb7654bfdd279df2a64779 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Tue, 3 Sep 2024 12:19:44 +0700 Subject: update tempt --- src/pages/api/shop/promo.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'src/pages/api') diff --git a/src/pages/api/shop/promo.js b/src/pages/api/shop/promo.js index 61fff4e5..57635958 100644 --- a/src/pages/api/shop/promo.js +++ b/src/pages/api/shop/promo.js @@ -49,8 +49,8 @@ export default async function handler(req, res) { let offset = (page - 1) * limit; let parameter = [ - // 'facet.field=manufacture_name_s', - // 'facet.field=category_name', + 'facet.field=manufacture_name_s', + 'facet.field=category_name', 'facet=true', 'indent=true', // `facet.query=${escapeSolrQuery(q)}`, @@ -108,7 +108,9 @@ export default async function handler(req, res) { let result = await axios( process.env.SOLR_HOST + '/solr/promotion_program_lines/select?' + parameter.join('&') ); + console.log("result",result.data) try { + console.log("result.data.response.docs",result.data.response.docs) result.data.response.products = promoMappingSolr( result.data.response.docs ); -- cgit v1.2.3 From ad168bf46919b46f708625b7d2fdc56606ec9af6 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Tue, 3 Sep 2024 14:01:02 +0700 Subject: update all promo fix --- src/pages/api/shop/promo.js | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) (limited to 'src/pages/api') diff --git a/src/pages/api/shop/promo.js b/src/pages/api/shop/promo.js index 57635958..221a9adb 100644 --- a/src/pages/api/shop/promo.js +++ b/src/pages/api/shop/promo.js @@ -3,7 +3,6 @@ import axios from 'axios'; import camelcaseObjectDeep from 'camelcase-object-deep'; export default async function handler(req, res) { - console.log("req_iman",req) const { q = '*', page = 1, @@ -11,7 +10,7 @@ export default async function handler(req, res) { category = '', priceFrom = 0, priceTo = 0, - orderBy = '', + orderBy = 'if(exists(sequence_i),0,1) asc, sequence_i asc,', operation = 'AND', fq = '', limit = 30, @@ -19,7 +18,7 @@ export default async function handler(req, res) { let { stock = '' } = req.query; - let paramOrderBy = ''; + let paramOrderBy = 'if(exists(sequence_i),0,1) asc, sequence_i asc,'; switch (orderBy) { case 'price-asc': paramOrderBy += 'price_tier1_v2_f ASC'; @@ -60,7 +59,7 @@ export default async function handler(req, res) { `start=${parseInt(offset)}`, `rows=${limit}`, `sort=${paramOrderBy}`, - // `fq=-publish_b:false, product_rating_f:[8 TO *], price_tier1_v2_f:[1 TO *]`, + `fq=product_ids:[* TO *]`, ]; if (priceFrom > 0 || priceTo > 0) { @@ -83,7 +82,7 @@ export default async function handler(req, res) { .split(',') .map( (manufacturer) => - `manufacture_name:"${encodeURIComponent(manufacturer)}"` + `manufacture_name_s:"${encodeURIComponent(manufacturer)}"` ) .join(' OR ')}` ); @@ -102,19 +101,14 @@ export default async function handler(req, res) { // Multi fq in url params if (Array.isArray(fq)) parameter = parameter.concat(fq.map((val) => `fq=${val}`)); - - console.log("parameter",parameter) let result = await axios( process.env.SOLR_HOST + '/solr/promotion_program_lines/select?' + parameter.join('&') ); - console.log("result",result.data) try { - console.log("result.data.response.docs",result.data.response.docs) result.data.response.products = promoMappingSolr( result.data.response.docs ); - console.log("result.data.response.products",result.data.response.products) result.data.responseHeader.params.start = parseInt( result.data.responseHeader.params.start @@ -123,7 +117,6 @@ export default async function handler(req, res) { result.data.responseHeader.params.rows ); delete result.data.response.docs; - console.log("result.data",result.data) // result.data = camelcaseObjectDeep(result.data); result.data = result.data; res.status(200).json(result.data); -- cgit v1.2.3