import { productMappingSolr, variantsMappingSolr } from '@/utils/solrMapping'; import axios from 'axios'; export default async function handler(req, res) { try { let productTemplate = await axios( process.env.SOLR_HOST + `/solr/product/select?q=id:${req.query.id}&q.op=OR&indent=true` ); let productVariants = await axios( process.env.SOLR_HOST + `/solr/variants/select?q=template_id_i:${req.query.id}&q.op=OR&indent=true&rows=100` // `/solr/variants/select?q=template_id_i:${req.query.id}&q.op=OR&indent=true&rows=100&fq=-publish_b:false AND price_tier1_v2_f:[1 TO *]` ); let auth = req.query.auth === 'false' ? JSON.parse(req.query.auth) : req.query.auth; let result = productMappingSolr( productTemplate.data.response.docs, auth || false ); result[0].variants = variantsMappingSolr( productTemplate.data.response.docs[0], productVariants.data.response.docs, auth || false ); res.status(200).json(result); } catch (error) { console.error('Error fetching data from Solr:', error); res.status(500).json({ error: 'Internal Server Error' }); } } /*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) { 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 }) } const productVariantsResponseMap = (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 } }*/