summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRafi Zadanly <zadanlyr@gmail.com>2023-10-18 14:43:26 +0700
committerRafi Zadanly <zadanlyr@gmail.com>2023-10-18 14:44:03 +0700
commitb4b17e22832a4665042a45030b77c3744fe61534 (patch)
treeb8a9526c5d5e9ef92de8268757843e0611f2bfa1 /src
parentb0f07da928f1956946fb36db8983718962b6bcee (diff)
Add category name on google merchant product xml
Diffstat (limited to 'src')
-rw-r--r--src/pages/google_merchant/products/[page].js45
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
}