diff options
| author | HATEC\SPVDEV001 <tri.susilo@altama.co.id> | 2023-10-04 13:56:11 +0700 |
|---|---|---|
| committer | HATEC\SPVDEV001 <tri.susilo@altama.co.id> | 2023-10-04 13:56:11 +0700 |
| commit | 72e7db4e20c2999bc4e6db3cef2ebe281898e915 (patch) | |
| tree | b27645f8d8dc386d9c192d9ffd96c2576626146f /src | |
| parent | a72b7217f84f819974d8e48b8ed1fb65ec5d9666 (diff) | |
mapping product solr
Diffstat (limited to 'src')
| -rw-r--r-- | src/pages/api/shop/product-detail.js | 16 | ||||
| -rw-r--r-- | src/pages/api/shop/search.js | 7 | ||||
| -rw-r--r-- | src/utils/solrMapping.js | 113 |
3 files changed, 122 insertions, 14 deletions
diff --git a/src/pages/api/shop/product-detail.js b/src/pages/api/shop/product-detail.js index 60433459..e9236571 100644 --- a/src/pages/api/shop/product-detail.js +++ b/src/pages/api/shop/product-detail.js @@ -1,3 +1,4 @@ +import { productMappingSolr, variantsMappingSolr } from '@/utils/solrMapping' import axios from 'axios' export default async function handler(req, res) { @@ -11,8 +12,8 @@ export default async function handler(req, res) { ) let { auth } = req.cookies if (auth) auth = JSON.parse(auth) - let result = productResponseMap(productTemplate.data.response.docs, auth?.pricelist || false) - result[0].variants = productVariantsResponseMap( + let result = productMappingSolr(productTemplate.data.response.docs, auth?.pricelist || false) + result[0].variants = variantsMappingSolr( productTemplate.data.response.docs[0], productVariants.data.response.docs, auth?.pricelist || false @@ -24,20 +25,13 @@ export default async function handler(req, res) { } } -const productResponseMap = (products, pricelist) => { +/*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 } @@ -141,4 +135,4 @@ const flashsaleTime = (endDate) => { const timeDifferenceInSeconds = timeDifferenceInMillis / 1000 return { remainingTime: timeDifferenceInSeconds, isFlashSale: flashsaleEndDate > currentTime } -} +}*/ diff --git a/src/pages/api/shop/search.js b/src/pages/api/shop/search.js index 823e2a61..2120a442 100644 --- a/src/pages/api/shop/search.js +++ b/src/pages/api/shop/search.js @@ -1,3 +1,4 @@ +import { productMappingSolr } from '@/utils/solrMapping' import axios from 'axios' import camelcaseObjectDeep from 'camelcase-object-deep' @@ -73,7 +74,7 @@ export default async function handler(req, res) { try { let { auth } = req.cookies if (auth) auth = JSON.parse(auth) - result.data.response.products = productResponseMap( + result.data.response.products = productMappingSolr( result.data.response.docs, auth?.pricelist || false ) @@ -102,7 +103,7 @@ const escapeSolrQuery = (query) => { return escapedWords.join(' ') } -const productResponseMap = (products, pricelist) => { +/*const productResponseMap = (products, pricelist) => { return products.map((product) => { let price = product.price_tier1_v2_f || 0 let priceDiscount = product.price_discount_f || 0 @@ -158,4 +159,4 @@ const productResponseMap = (products, pricelist) => { ] return productMapped }) -} +}*/ diff --git a/src/utils/solrMapping.js b/src/utils/solrMapping.js new file mode 100644 index 00000000..c8bd54ea --- /dev/null +++ b/src/utils/solrMapping.js @@ -0,0 +1,113 @@ +export const productMappingSolr = (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) { + 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 || '', + description: product.description_t || '', + displayName: product.display_name_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, + remainingTime: flashsaleTime(product?.flashsale_end_date_s)?.remainingTime, + 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 || '', + imagePromotion1: product.image_promotion_1_s || '', + imagePromotion2: product.image_promotion_2_s || '' + } + } + + productMapped.categories = [ + { + id: product.category_id_i || '', + name: product.category_name_s || '' + } + ] + return productMapped + }) +} + +export const variantsMappingSolr = (parent, 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) { + 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 = { + attributes: product.attributes || [], + id: product.product_id_i || '', + image: product.image_s || '', + code: product.default_code_s || '', + isFlashsale: flashsaleTime(product?.flashsale_end_date_s)?.isFlashSale, + isFlashsale: flashsaleTime(product?.flashsale_end_date_s)?.isFlashSale, + name: product.display_name_s || '', + price: { price, priceDiscount, discountPercentage }, + variantTotal: product.variant_total_i || 0, + stockTotal: product.stock_total_f || 0, + weight: product.weight_f || 0, + manufacture: {}, + parent: {} + } + + if (product.manufacture_id_i && product.manufacture_name_s) { + productMapped.manufacture = { + id: product.manufacture_id_i || '', + name: product.manufacture_name_s || '' + } + } + productMapped.parent = { + id: parent.product_id_i || '', + image: parent.image_s || '', + name: parent.name_s || '' + } + return productMapped + }) + } + +const flashsaleTime = (endDate) => { + const flashsaleEndDate = new Date(endDate) + const currentTime = new Date() + + const timeDifferenceInMillis = flashsaleEndDate - currentTime + const timeDifferenceInSeconds = timeDifferenceInMillis / 1000 + + return { remainingTime: timeDifferenceInSeconds, isFlashSale: flashsaleEndDate > currentTime } + } + |
