From e5a01976cb665b824b2ad6426a2c52a5bd0964e6 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Sat, 27 Jul 2024 08:27:54 +0700 Subject: add feature category lob --- src/pages/api/shop/product-homepage.js | 3 ++- src/pages/api/shop/search.js | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) (limited to 'src/pages/api') diff --git a/src/pages/api/shop/product-homepage.js b/src/pages/api/shop/product-homepage.js index 02c01ee0..61732c77 100644 --- a/src/pages/api/shop/product-homepage.js +++ b/src/pages/api/shop/product-homepage.js @@ -36,7 +36,8 @@ const respoonseMap = (productHomepage, products) => { name: productHomepage.name_s, image: productHomepage.image_s, url: productHomepage.url_s, - products: products + products: products, + categoryIds: productHomepage.category_id_ids, } return productMapped diff --git a/src/pages/api/shop/search.js b/src/pages/api/shop/search.js index b6b8c795..66f517ae 100644 --- a/src/pages/api/shop/search.js +++ b/src/pages/api/shop/search.js @@ -56,7 +56,7 @@ export default async function handler(req, res) { `start=${parseInt(offset)}`, `rows=${limit}`, `sort=${paramOrderBy}`, - `fq=-publish_b:false`, + // `fq=-publish_b:false`, ]; if (priceFrom > 0 || priceTo > 0) { -- cgit v1.2.3 From f1910544cf6df50bcb175b66b604f5903f6ae3fa Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Sat, 27 Jul 2024 13:34:00 +0700 Subject: update category management for lob --- src/pages/api/shop/search.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/pages/api') diff --git a/src/pages/api/shop/search.js b/src/pages/api/shop/search.js index 66f517ae..b6b8c795 100644 --- a/src/pages/api/shop/search.js +++ b/src/pages/api/shop/search.js @@ -56,7 +56,7 @@ export default async function handler(req, res) { `start=${parseInt(offset)}`, `rows=${limit}`, `sort=${paramOrderBy}`, - // `fq=-publish_b:false`, + `fq=-publish_b:false`, ]; if (priceFrom > 0 || priceTo > 0) { -- cgit v1.2.3 From ae5891eba4ad89fd8281d26ce765b3b5d6662483 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Thu, 22 Aug 2024 17:22:28 +0700 Subject: update email --- src/pages/api/activation-request.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/pages/api') diff --git a/src/pages/api/activation-request.js b/src/pages/api/activation-request.js index 61dbb597..64a67bbc 100644 --- a/src/pages/api/activation-request.js +++ b/src/pages/api/activation-request.js @@ -7,7 +7,7 @@ export default async function handler(req, res) { let result = await odooApi('POST', '/api/v1/user/activation-request', { email }) if (result.activationRequest) { mailer.sendMail({ - from: 'sales@indoteknik.com', + from: 'noreply@indoteknik.com', to: result.user.email, subject: 'Permintaan Aktivasi Akun Indoteknik', html: ` -- cgit v1.2.3 From 07dd60c2706d960ebb9cebe093b449f32c5f87a2 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Fri, 23 Aug 2024 09:32:19 +0700 Subject: update activation request from mail --- src/pages/api/activation-request.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/pages/api') diff --git a/src/pages/api/activation-request.js b/src/pages/api/activation-request.js index 64a67bbc..98d27f78 100644 --- a/src/pages/api/activation-request.js +++ b/src/pages/api/activation-request.js @@ -7,7 +7,7 @@ export default async function handler(req, res) { let result = await odooApi('POST', '/api/v1/user/activation-request', { email }) if (result.activationRequest) { mailer.sendMail({ - from: 'noreply@indoteknik.com', + from: 'Indoteknik.com ', to: result.user.email, subject: 'Permintaan Aktivasi Akun Indoteknik', html: ` -- cgit v1.2.3 From e9f3435ceb5d85e4926f26c3a893b96edb898918 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Sat, 24 Aug 2024 09:29:31 +0700 Subject: update ready stock search --- src/pages/api/shop/search.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src/pages/api') diff --git a/src/pages/api/shop/search.js b/src/pages/api/shop/search.js index 6f98efcb..eadccede 100644 --- a/src/pages/api/shop/search.js +++ b/src/pages/api/shop/search.js @@ -18,6 +18,8 @@ export default async function handler(req, res) { let { stock = '' } = req.query; + let isStock = false + let paramOrderBy = ''; switch (orderBy) { case 'price-asc': @@ -33,6 +35,7 @@ export default async function handler(req, res) { paramOrderBy += 'search_rank_weekly_i DESC'; break; case 'stock': + isStock = true paramOrderBy += 'product_rating_f DESC, stock_total_f DESC'; break; case 'flashsale-price-asc': @@ -94,7 +97,7 @@ export default async function handler(req, res) { .join(' OR ')}` ); // if (category) parameter.push(`fq=category_name:${capitalizeFirstLetter(category.replace(/,/g, ' OR '))}`) - if (stock) parameter.push(`fq=stock_total_f:{1 TO *}`); + if (stock || isStock) parameter.push(`fq=stock_total_f:[0.1 TO *]`); // Single fq in url params if (typeof fq === 'string') parameter.push(`fq=${fq}`); -- cgit v1.2.3 From 49118c78bf93fbb4d35b163e4c4b6db0f0f8be27 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Sat, 24 Aug 2024 10:25:13 +0700 Subject: update search sort by stock on populer --- src/pages/api/shop/search.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/pages/api') diff --git a/src/pages/api/shop/search.js b/src/pages/api/shop/search.js index eadccede..f476faf8 100644 --- a/src/pages/api/shop/search.js +++ b/src/pages/api/shop/search.js @@ -29,7 +29,7 @@ export default async function handler(req, res) { paramOrderBy += 'price_tier1_v2_f DESC'; break; case 'popular': - paramOrderBy += 'product_rating_f DESC, search_rank_i DESC,'; + paramOrderBy += 'stock_total_f DESC, product_rating_f DESC, search_rank_i DESC,'; break; case 'popular-weekly': paramOrderBy += 'search_rank_weekly_i DESC'; -- cgit v1.2.3 From eb849656d807aa22d14f97f79b6114c599628b42 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Mon, 26 Aug 2024 10:37:39 +0700 Subject: back to original code before stock --- src/pages/api/shop/search.js | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) (limited to 'src/pages/api') diff --git a/src/pages/api/shop/search.js b/src/pages/api/shop/search.js index f476faf8..6f98efcb 100644 --- a/src/pages/api/shop/search.js +++ b/src/pages/api/shop/search.js @@ -18,8 +18,6 @@ export default async function handler(req, res) { let { stock = '' } = req.query; - let isStock = false - let paramOrderBy = ''; switch (orderBy) { case 'price-asc': @@ -29,13 +27,12 @@ export default async function handler(req, res) { paramOrderBy += 'price_tier1_v2_f DESC'; break; case 'popular': - paramOrderBy += 'stock_total_f DESC, product_rating_f DESC, search_rank_i DESC,'; + paramOrderBy += 'product_rating_f DESC, search_rank_i DESC,'; break; case 'popular-weekly': paramOrderBy += 'search_rank_weekly_i DESC'; break; case 'stock': - isStock = true paramOrderBy += 'product_rating_f DESC, stock_total_f DESC'; break; case 'flashsale-price-asc': @@ -97,7 +94,7 @@ export default async function handler(req, res) { .join(' OR ')}` ); // if (category) parameter.push(`fq=category_name:${capitalizeFirstLetter(category.replace(/,/g, ' OR '))}`) - if (stock || isStock) parameter.push(`fq=stock_total_f:[0.1 TO *]`); + if (stock) parameter.push(`fq=stock_total_f:{1 TO *}`); // Single fq in url params if (typeof fq === 'string') parameter.push(`fq=${fq}`); -- cgit v1.2.3 From af6494b92528cee8fae7173e8290c4ebbc334efa Mon Sep 17 00:00:00 2001 From: trisusilo48 Date: Wed, 28 Aug 2024 09:47:39 +0700 Subject: handling ready to ship --- src/pages/api/shop/search.js | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) (limited to 'src/pages/api') diff --git a/src/pages/api/shop/search.js b/src/pages/api/shop/search.js index 6f98efcb..a19224df 100644 --- a/src/pages/api/shop/search.js +++ b/src/pages/api/shop/search.js @@ -1,6 +1,7 @@ import { productMappingSolr } from '@/utils/solrMapping'; import axios from 'axios'; import camelcaseObjectDeep from 'camelcase-object-deep'; +import searchSuggestApi from '@/core/api/searchSuggestApi'; export default async function handler(req, res) { const { @@ -42,10 +43,29 @@ export default async function handler(req, res) { paramOrderBy += ''; break; } - + + // let suggestWord = null; + // let keywords = q; + // let checkQ = null; + + // if (q != '*') { + // checkQ = q.trim().split(/[\s\+\-\!\(\)\{\}\[\]\^"~\*\?:\\\/]+/); + // if (checkQ.length > 1) { + // const dataSearchSuggest = await axios( + // `${process.env.NEXT_PUBLIC_SELF_HOST}/api/shop/suggest?q=${checkQ[1]}` + // ); + // suggestWord = dataSearchSuggest.data.suggestions[0]; + // } + // if (suggestWord && suggestWord?.term.split(' ').length <= 1) { + // keywords = `"${escapeSolrQuery(checkQ[0] + ' ' + suggestWord?.term)}"`; + // } + // } + + // let newQ = keywords; + 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', @@ -54,7 +74,7 @@ export default async function handler(req, res) { 'indent=true', `facet.query=${escapeSolrQuery(q)}`, `q.op=${operation}`, - `q=${newQ}`, + `q=name_s:${newQ}`, 'qf=name_s', `start=${parseInt(offset)}`, `rows=${limit}`, @@ -105,6 +125,7 @@ export default async function handler(req, res) { let result = await axios( process.env.SOLR_HOST + '/solr/product/select?' + parameter.join('&') ); + console.log('ini search', parameter.join('&')); try { result.data.response.products = productMappingSolr( result.data.response.docs, @@ -126,7 +147,7 @@ export default async function handler(req, res) { const escapeSolrQuery = (query) => { if (query == '*') return query; - + query = query.replace(/-/g, ' '); const specialChars = /([\+\!\(\)\{\}\[\]\^"~\*\?:\\\/])/g; @@ -141,7 +162,6 @@ const escapeSolrQuery = (query) => { return escapedWords.join(' '); }; - /*const productResponseMap = (products, pricelist) => { return products.map((product) => { let price = product.price_tier1_v2_f || 0 -- cgit v1.2.3 From 47c66a1c432feaf898e3285520dfa892d22d4ad2 Mon Sep 17 00:00:00 2001 From: trisusilo48 Date: Fri, 30 Aug 2024 10:25:04 +0700 Subject: search eenggin --- src/pages/api/shop/search.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src/pages/api') diff --git a/src/pages/api/shop/search.js b/src/pages/api/shop/search.js index a19224df..61f5bf2d 100644 --- a/src/pages/api/shop/search.js +++ b/src/pages/api/shop/search.js @@ -65,6 +65,7 @@ export default async function handler(req, res) { let checkQ = q.trim().split(/[\s\+\-\!\(\)\{\}\[\]\^"~\*\?:\\\/]+/); let newQ = checkQ.length > 1 ? escapeSolrQuery(q) + '*' : escapeSolrQuery(q); + let excludeDescription = checkQ.map(term => `-description_t:"${term}"`).join(', '); let offset = (page - 1) * limit; let parameter = [ @@ -74,12 +75,12 @@ export default async function handler(req, res) { 'indent=true', `facet.query=${escapeSolrQuery(q)}`, `q.op=${operation}`, - `q=name_s:${newQ}`, + `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 *]`, + `fq=-publish_b:false, product_rating_f:[8 TO *], price_tier1_v2_f:[1 TO *], ${excludeDescription}`, ]; if (priceFrom > 0 || priceTo > 0) { -- cgit v1.2.3 From 58a8e3c000c6364f81e37a38f1cf6031b7430985 Mon Sep 17 00:00:00 2001 From: trisusilo48 Date: Mon, 2 Sep 2024 13:05:46 +0700 Subject: update --- src/pages/api/shop/search.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'src/pages/api') diff --git a/src/pages/api/shop/search.js b/src/pages/api/shop/search.js index 61f5bf2d..0227a7eb 100644 --- a/src/pages/api/shop/search.js +++ b/src/pages/api/shop/search.js @@ -75,12 +75,14 @@ export default async function handler(req, res) { 'indent=true', `facet.query=${escapeSolrQuery(q)}`, `q.op=${operation}`, - `q=${newQ}`, - 'qf=name_s', + `q=tool box`, + `defType=dismax`, + 'qf=name_s^2, description_s, category_name, manufacture_name_s', + `mm=${checkQ.length}`, `start=${parseInt(offset)}`, `rows=${limit}`, `sort=${paramOrderBy}`, - `fq=-publish_b:false, product_rating_f:[8 TO *], price_tier1_v2_f:[1 TO *], ${excludeDescription}`, + `fq=-publish_b:false, product_rating_f:[8 TO *], price_tier1_v2_f:[1 TO *]`, ]; if (priceFrom > 0 || priceTo > 0) { -- cgit v1.2.3 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 277f7eea312492c66ec8d942199dba65593e78b8 Mon Sep 17 00:00:00 2001 From: trisusilo48 Date: Mon, 2 Sep 2024 15:12:58 +0700 Subject: new --- src/pages/api/shop/search.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'src/pages/api') diff --git a/src/pages/api/shop/search.js b/src/pages/api/shop/search.js index 0227a7eb..d0343fb8 100644 --- a/src/pages/api/shop/search.js +++ b/src/pages/api/shop/search.js @@ -2,6 +2,7 @@ import { productMappingSolr } from '@/utils/solrMapping'; import axios from 'axios'; import camelcaseObjectDeep from 'camelcase-object-deep'; import searchSuggestApi from '@/core/api/searchSuggestApi'; +import { ECDH } from 'crypto'; export default async function handler(req, res) { const { @@ -65,7 +66,7 @@ export default async function handler(req, res) { let checkQ = q.trim().split(/[\s\+\-\!\(\)\{\}\[\]\^"~\*\?:\\\/]+/); let newQ = checkQ.length > 1 ? escapeSolrQuery(q) + '*' : escapeSolrQuery(q); - let excludeDescription = checkQ.map(term => `-description_t:"${term}"`).join(', '); + let excludeDescription = checkQ.map(term => escapeSolrQuery(term)).join(' AND '); let offset = (page - 1) * limit; let parameter = [ @@ -75,10 +76,8 @@ export default async function handler(req, res) { 'indent=true', `facet.query=${escapeSolrQuery(q)}`, `q.op=${operation}`, - `q=tool box`, - `defType=dismax`, + `q=${excludeDescription}*`, 'qf=name_s^2, description_s, category_name, manufacture_name_s', - `mm=${checkQ.length}`, `start=${parseInt(offset)}`, `rows=${limit}`, `sort=${paramOrderBy}`, -- 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 From e1753f5cb16ce4094a6106a829339b8db2b99dd2 Mon Sep 17 00:00:00 2001 From: trisusilo48 Date: Fri, 6 Sep 2024 16:38:12 +0700 Subject: search --- src/pages/api/shop/search.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'src/pages/api') diff --git a/src/pages/api/shop/search.js b/src/pages/api/shop/search.js index d0343fb8..089a1722 100644 --- a/src/pages/api/shop/search.js +++ b/src/pages/api/shop/search.js @@ -66,7 +66,6 @@ export default async function handler(req, res) { let checkQ = q.trim().split(/[\s\+\-\!\(\)\{\}\[\]\^"~\*\?:\\\/]+/); let newQ = checkQ.length > 1 ? escapeSolrQuery(q) + '*' : escapeSolrQuery(q); - let excludeDescription = checkQ.map(term => escapeSolrQuery(term)).join(' AND '); let offset = (page - 1) * limit; let parameter = [ @@ -76,12 +75,13 @@ export default async function handler(req, res) { 'indent=true', `facet.query=${escapeSolrQuery(q)}`, `q.op=${operation}`, - `q=${excludeDescription}*`, - 'qf=name_s^2, description_s, category_name, manufacture_name_s', + `q=${newQ}`, + `defType=edismax`, + 'qf=name_s description_clean_t category_name manufacture_name_s variants_code_t variants_name_t category_id_ids default_code_s', `start=${parseInt(offset)}`, `rows=${limit}`, `sort=${paramOrderBy}`, - `fq=-publish_b:false, product_rating_f:[8 TO *], price_tier1_v2_f:[1 TO *]`, + `fq=-publish_b:false, product_rating_f:[8 TO *], price_tier1_v2_f:[1 TO *]` ]; if (priceFrom > 0 || priceTo > 0) { @@ -127,7 +127,7 @@ export default async function handler(req, res) { let result = await axios( process.env.SOLR_HOST + '/solr/product/select?' + parameter.join('&') ); - console.log('ini search', parameter.join('&')); + try { result.data.response.products = productMappingSolr( result.data.response.docs, -- cgit v1.2.3 From fefcfc05fd83421cedc76e0f690129fd9a057f77 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Mon, 9 Sep 2024 14:57:09 +0700 Subject: update fetch data all promo --- src/pages/api/shop/promo.js | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/pages/api') diff --git a/src/pages/api/shop/promo.js b/src/pages/api/shop/promo.js index 221a9adb..983f8fae 100644 --- a/src/pages/api/shop/promo.js +++ b/src/pages/api/shop/promo.js @@ -52,6 +52,7 @@ export default async function handler(req, res) { 'facet.field=category_name', 'facet=true', 'indent=true', + `facet.limit=-1`, // `facet.query=${escapeSolrQuery(q)}`, `q.op=${operation}`, `q=${q}`, @@ -60,6 +61,7 @@ export default async function handler(req, res) { `rows=${limit}`, `sort=${paramOrderBy}`, `fq=product_ids:[* TO *]`, + `active_b:true`, ]; if (priceFrom > 0 || priceTo > 0) { -- cgit v1.2.3 From 782a54c1a57ed16f6b28be3c6c589b35cc2fbc97 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Mon, 9 Sep 2024 15:15:20 +0700 Subject: update field active_b --- src/pages/api/shop/promo.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/pages/api') diff --git a/src/pages/api/shop/promo.js b/src/pages/api/shop/promo.js index 983f8fae..f90c8559 100644 --- a/src/pages/api/shop/promo.js +++ b/src/pages/api/shop/promo.js @@ -61,7 +61,7 @@ export default async function handler(req, res) { `rows=${limit}`, `sort=${paramOrderBy}`, `fq=product_ids:[* TO *]`, - `active_b:true`, + `fq=active_b:true`, ]; if (priceFrom > 0 || priceTo > 0) { -- cgit v1.2.3 From aff296d79cc148a919b33c2c589d6b803fb39a22 Mon Sep 17 00:00:00 2001 From: trisusilo48 Date: Tue, 10 Sep 2024 14:58:24 +0700 Subject: update --- src/pages/api/shop/search.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/pages/api') diff --git a/src/pages/api/shop/search.js b/src/pages/api/shop/search.js index 089a1722..1b6377f4 100644 --- a/src/pages/api/shop/search.js +++ b/src/pages/api/shop/search.js @@ -81,7 +81,8 @@ 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=-publish_b:false, product_rating_f:[8 TO *], price_tier1_v2_f:[1 TO *]`, + `mm=2` ]; if (priceFrom > 0 || priceTo > 0) { -- cgit v1.2.3 From 1e8959ef719689bc8ddd2477fa12e960f4c9a759 Mon Sep 17 00:00:00 2001 From: trisusilo48 Date: Wed, 11 Sep 2024 10:02:37 +0700 Subject: cr - operation , handle minimum match --- src/pages/api/shop/search.js | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) (limited to 'src/pages/api') diff --git a/src/pages/api/shop/search.js b/src/pages/api/shop/search.js index 1b6377f4..550217d8 100644 --- a/src/pages/api/shop/search.js +++ b/src/pages/api/shop/search.js @@ -16,6 +16,7 @@ export default async function handler(req, res) { operation = 'AND', fq = '', limit = 30, + source = '', } = req.query; let { stock = '' } = req.query; @@ -65,7 +66,18 @@ export default async function handler(req, res) { // let newQ = keywords; let checkQ = q.trim().split(/[\s\+\-\!\(\)\{\}\[\]\^"~\*\?:\\\/]+/); - let newQ = checkQ.length > 1 ? escapeSolrQuery(q) + '*' : escapeSolrQuery(q); + let newQ = escapeSolrQuery(q); + + const formattedQuery = `(${newQ.split(' ').map(term => `${term}*`).join(' ') })`; + const mm = checkQ.length > 2 ? checkQ.length > 5 ? '65%' : '85%' : `${checkQ.length}`; + + const filterQueries = [ + '-publish_b:false', + 'product_rating_f:[8 TO *]', + 'price_tier1_v2_f:[1 TO *]' + ]; + + const fq_ = filterQueries.join('AND '); let offset = (page - 1) * limit; let parameter = [ @@ -74,15 +86,15 @@ export default async function handler(req, res) { 'facet=true', 'indent=true', `facet.query=${escapeSolrQuery(q)}`, - `q.op=${operation}`, - `q=${newQ}`, + `q.op=OR`, + `q=${source == 'similar' || checkQ.length < 3 ? newQ + '*' : formattedQuery }`, `defType=edismax`, 'qf=name_s description_clean_t category_name manufacture_name_s variants_code_t variants_name_t category_id_ids default_code_s', `start=${parseInt(offset)}`, `rows=${limit}`, `sort=${paramOrderBy}`, - `fq=-publish_b:false, product_rating_f:[8 TO *], price_tier1_v2_f:[1 TO *]`, - `mm=2` + `fq=${encodeURIComponent(fq_)}`, + `mm=${encodeURIComponent(mm)}`, ]; if (priceFrom > 0 || priceTo > 0) { @@ -120,10 +132,12 @@ export default async function handler(req, res) { if (stock) parameter.push(`fq=stock_total_f:{1 TO *}`); // Single fq in url params - if (typeof fq === 'string') parameter.push(`fq=${fq}`); + if (typeof fq === 'string') parameter.push(`fq=${encodeURIComponent(fq)}`); // Multi fq in url params if (Array.isArray(fq)) - parameter = parameter.concat(fq.map((val) => `fq=${val}`)); + parameter = parameter.concat(fq.map((val) => `fq=${encodeURIComponent(val)}`)); + + console.log('ini params', parameter); let result = await axios( process.env.SOLR_HOST + '/solr/product/select?' + parameter.join('&') -- cgit v1.2.3 From 0112efd7ce539f4276c66e5ad553288a9bf61343 Mon Sep 17 00:00:00 2001 From: trisusilo48 Date: Wed, 11 Sep 2024 10:36:32 +0700 Subject: handle if leng 1 --- src/pages/api/shop/search.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/pages/api') diff --git a/src/pages/api/shop/search.js b/src/pages/api/shop/search.js index 550217d8..68a9abcd 100644 --- a/src/pages/api/shop/search.js +++ b/src/pages/api/shop/search.js @@ -87,7 +87,7 @@ export default async function handler(req, res) { 'indent=true', `facet.query=${escapeSolrQuery(q)}`, `q.op=OR`, - `q=${source == 'similar' || checkQ.length < 3 ? newQ + '*' : formattedQuery }`, + `q=${source == 'similar' || checkQ.length < 3 ? checkQ.length < 2 ? newQ : newQ + '*' : formattedQuery }`, `defType=edismax`, 'qf=name_s description_clean_t category_name manufacture_name_s variants_code_t variants_name_t category_id_ids default_code_s', `start=${parseInt(offset)}`, -- cgit v1.2.3 From 3918b401286243a6ceb376d267b802b87f1b1a2f Mon Sep 17 00:00:00 2001 From: trisusilo48 Date: Thu, 12 Sep 2024 10:16:12 +0700 Subject: handling similar --- src/pages/api/shop/search.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'src/pages/api') diff --git a/src/pages/api/shop/search.js b/src/pages/api/shop/search.js index 68a9abcd..6269d3ed 100644 --- a/src/pages/api/shop/search.js +++ b/src/pages/api/shop/search.js @@ -69,7 +69,7 @@ export default async function handler(req, res) { let newQ = escapeSolrQuery(q); const formattedQuery = `(${newQ.split(' ').map(term => `${term}*`).join(' ') })`; - const mm = checkQ.length > 2 ? checkQ.length > 5 ? '65%' : '85%' : `${checkQ.length}`; + const mm = checkQ.length > 2 ? checkQ.length > 5 ? '55%' : '85%' : `${checkQ.length}`; const filterQueries = [ '-publish_b:false', @@ -136,9 +136,7 @@ export default async function handler(req, res) { // Multi fq in url params if (Array.isArray(fq)) parameter = parameter.concat(fq.map((val) => `fq=${encodeURIComponent(val)}`)); - - console.log('ini params', parameter); - + let result = await axios( process.env.SOLR_HOST + '/solr/product/select?' + parameter.join('&') ); -- cgit v1.2.3 From 171f4328fce3144e4b72f94dcc3c2d2c7d8b4273 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Wed, 18 Sep 2024 09:33:02 +0700 Subject: change sales@indoteknik to noreply@indoteknik --- src/pages/api/shop/finish-checkout.js | 84 +++++++++++++++++++---------------- 1 file changed, 45 insertions(+), 39 deletions(-) (limited to 'src/pages/api') diff --git a/src/pages/api/shop/finish-checkout.js b/src/pages/api/shop/finish-checkout.js index 9eaa36db..4dcc915c 100644 --- a/src/pages/api/shop/finish-checkout.js +++ b/src/pages/api/shop/finish-checkout.js @@ -1,60 +1,66 @@ -import odooApi from '@/core/api/odooApi' -import mailer from '@/core/utils/mailer' -import FinishCheckoutEmail from '@/lib/checkout/email/FinishCheckoutEmail' -import { render } from '@react-email/render' -import axios from 'axios' -import camelcaseObjectDeep from 'camelcase-object-deep' +import odooApi from '@/core/api/odooApi'; +import mailer from '@/core/utils/mailer'; +import FinishCheckoutEmail from '@/lib/checkout/email/FinishCheckoutEmail'; +import { render } from '@react-email/render'; +import axios from 'axios'; +import camelcaseObjectDeep from 'camelcase-object-deep'; export default async function handler(req, res) { - const { orderName = null } = req.query + const { orderName = null } = req.query; if (!orderName) { - return res.status(422).json({ error: 'parameter missing' }) + return res.status(422).json({ error: 'parameter missing' }); } - let { auth } = req.cookies + let { auth } = req.cookies; if (!auth) { - return res.status(401).json({ error: 'Unauthorized' }) + return res.status(401).json({ error: 'Unauthorized' }); } - auth = JSON.parse(auth) + auth = JSON.parse(auth); - const midtransAuthKey = btoa(process.env.MIDTRANS_SERVER_KEY + ':') + const midtransAuthKey = btoa(process.env.MIDTRANS_SERVER_KEY + ':'); const midtransHeaders = { Accept: 'application/json', 'Content-Type': 'application/json', - Authorization: `Basic ${midtransAuthKey}` - } - let midtransStatus = {} + Authorization: `Basic ${midtransAuthKey}`, + }; + let midtransStatus = {}; try { - midtransStatus = await axios.get(`${process.env.MIDTRANS_HOST}/v2/${orderName}/status`, { - headers: midtransHeaders - }) - midtransStatus = camelcaseObjectDeep(midtransStatus.data) + midtransStatus = await axios.get( + `${process.env.MIDTRANS_HOST}/v2/${orderName}/status`, + { + headers: midtransHeaders, + } + ); + midtransStatus = camelcaseObjectDeep(midtransStatus.data); } catch (error) { - console.log(error) + console.log(error); } - let statusPayment = 'manual' + let statusPayment = 'manual'; if (midtransStatus?.orderId) { - const transactionStatus = midtransStatus.transactionStatus - statusPayment = 'failed' + const transactionStatus = midtransStatus.transactionStatus; + statusPayment = 'failed'; if (['capture', 'settlement'].includes(transactionStatus)) { - statusPayment = 'success' + statusPayment = 'success'; } else if (transactionStatus == 'pending') { - statusPayment = 'pending' + statusPayment = 'pending'; } } - const query = `name=${orderName.replaceAll('-', '/')}&limit=1&context=quotation` + const query = `name=${orderName.replaceAll( + '-', + '/' + )}&limit=1&context=quotation`; const searchTransaction = await odooApi( 'GET', `/api/v1/partner/${auth.partnerId}/sale_order?${query}`, {}, { Token: auth.token } - ) + ); if (searchTransaction.saleOrderTotal == 0) { - return res.status(400).json({ error: 'Transaction Not Found' }) + return res.status(400).json({ error: 'Transaction Not Found' }); } let transaction = await odooApi( @@ -62,17 +68,17 @@ export default async function handler(req, res) { `/api/v1/partner/${auth.partnerId}/sale_order/${searchTransaction.saleOrders[0].id}`, {}, { Token: auth.token } - ) + ); if (!transaction?.id) { - return res.status(400).json({ error: 'Transaction Detail Not Found' }) + return res.status(400).json({ error: 'Transaction Detail Not Found' }); } - transaction.subtotal = 0 - transaction.discountTotal = 0 + transaction.subtotal = 0; + transaction.discountTotal = 0; for (const product of transaction.products) { - transaction.subtotal += product.price.price * product.quantity + transaction.subtotal += product.price.price * product.quantity; transaction.discountTotal -= - (product.price.price - product.price.priceDiscount) * product.quantity + (product.price.price - product.price.priceDiscount) * product.quantity; } const emailMessage = render( @@ -81,14 +87,14 @@ export default async function handler(req, res) { payment={midtransStatus} statusPayment={statusPayment} /> - ) + ); mailer.sendMail({ - from: 'sales@indoteknik.com', + from: 'noreply@indoteknik.com', to: transaction.address.customer.email, subject: 'Pembelian di Indoteknik.com', - html: emailMessage - }) + html: emailMessage, + }); - return res.status(200).json({ description: 'success' }) + return res.status(200).json({ description: 'success' }); } -- cgit v1.2.3 From 840b50072a885dd3cf41ea3351d70c9a1d525ff4 Mon Sep 17 00:00:00 2001 From: trisusilo48 Date: Fri, 20 Sep 2024 15:11:11 +0700 Subject: update quiery preference brands --- src/pages/api/shop/brands.js | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/pages/api') diff --git a/src/pages/api/shop/brands.js b/src/pages/api/shop/brands.js index cc64a7e7..9c2824b3 100644 --- a/src/pages/api/shop/brands.js +++ b/src/pages/api/shop/brands.js @@ -24,6 +24,8 @@ export default async function handler(req, res) { params = `name_s:${req.query.params}`.toLowerCase(); } } + if(req.query.rows) rows = req.query.rows; + const url = `${SOLR_HOST}/solr/brands/select?q=${params}&q.op=OR&indent=true&rows=${rows}&${sort}`; let brands = await axios(url); let dataBrands = responseMap(brands.data.response.docs); -- cgit v1.2.3