diff options
| author | Rafi Zadanly <zadanlyr@gmail.com> | 2023-10-18 14:43:26 +0700 |
|---|---|---|
| committer | Rafi Zadanly <zadanlyr@gmail.com> | 2023-10-18 14:44:03 +0700 |
| commit | b4b17e22832a4665042a45030b77c3744fe61534 (patch) | |
| tree | b8a9526c5d5e9ef92de8268757843e0611f2bfa1 /src | |
| parent | b0f07da928f1956946fb36db8983718962b6bcee (diff) | |
Add category name on google merchant product xml
Diffstat (limited to 'src')
| -rw-r--r-- | src/pages/google_merchant/products/[page].js | 45 |
1 files changed, 42 insertions, 3 deletions
diff --git a/src/pages/google_merchant/products/[page].js b/src/pages/google_merchant/products/[page].js index d6309090..c8b4079b 100644 --- a/src/pages/google_merchant/products/[page].js +++ b/src/pages/google_merchant/products/[page].js @@ -2,6 +2,7 @@ import { createSlug } from '@/core/utils/slug' import toTitleCase from '@/core/utils/toTitleCase' import productSearchApi from '@/lib/product/api/productSearchApi' import variantSearchApi from '@/lib/product/api/variantSearchApi' +import axios from 'axios' import _ from 'lodash-contrib' import { create } from 'xmlbuilder' @@ -21,8 +22,11 @@ export async function getServerSideProps({ res, query }) { } const products = await variantSearchApi({ query: _.toQuery(queries) }) + const brandsData = {} + const categoriesData = {} + const productItems = [] - products.response.products.forEach((product) => { + for (const product of products.response.products) { const productUrl = createSlug('/shop/product/variant/', product.name, product.id, true) const productId = product.code != '' ? product.code : product.id const regexHtmlTags = /(<([^>]+)>)/gi @@ -34,6 +38,27 @@ export async function getServerSideProps({ res, query }) { product.description = defaultProductDescription } + let categoryName = null + + let brandId = product.manufacture?.id ?? null + let categoryId = null + + if (brandId && brandId in brandsData) { + categoryId = brandsData[brandId].category_ids?.[0] ?? null + } else { + const solrBrand = await getBrandById(brandId) + brandsData[brandId] = solrBrand + categoryId = solrBrand?.category_ids?.[0] ?? null + } + + if (categoryId && categoryId in categoriesData) { + categoryName = categoriesData[categoryId].name_s ?? null + } else { + const solrCategory = await getCategoryById(categoryId) + categoriesData[categoryId] = solrCategory + categoryName = solrCategory?.name_s ?? null + } + const availability = 'in_stock' const item = { @@ -47,20 +72,24 @@ export async function getServerSideProps({ res, query }) { 'g:brand': { '#text': product.manufacture?.name || '' }, 'g:price': { '#text': `${Math.round(product.lowestPrice.price * 1.11)} IDR` } } - + if (product.stockTotal == 0) { item['g:custom_label_0'] = { '#text': 'Stok Tidak Tersedia' } } else { item['g:custom_label_1'] = { '#text': 'Stok Tersedia' } } + if (categoryName) { + item['g:custom_label_2'] = { '#text': categoryName } + } + if (product.lowestPrice.discountPercentage > 0) { item['g:sale_price'] = { '#text': `${Math.round(product.lowestPrice.priceDiscount * 1.11)} IDR` } } productItems.push(item) - }) + } const googleMerchant = { rss: { @@ -82,6 +111,16 @@ export async function getServerSideProps({ res, query }) { return { props: {} } } +const getBrandById = async (id) => { + const brand = await axios(`${process.env.SOLR_HOST}/solr/brands/select?q=id:${id}`) + return brand.data.response.docs[0] ?? null +} + +const getCategoryById = async (id) => { + const category = await axios(`${process.env.SOLR_HOST}/solr/categories/select?q=id:${id}`) + return category.data.response.docs[0] ?? null +} + export default function GoogleMerchantPage() { return null } |
