summaryrefslogtreecommitdiff
path: root/src/pages
diff options
context:
space:
mode:
authorIT Fixcomart <it@fixcomart.co.id>2025-11-13 10:38:49 +0000
committerIT Fixcomart <it@fixcomart.co.id>2025-11-13 10:38:49 +0000
commit4e24ad6def0e8df890b72f2f7f877424d8ed84cc (patch)
tree3f11401901f5439fb25ea351346ec14ee622fa26 /src/pages
parent9cbbe5e12f97af023e2f53e4add4c5e5fd9b4667 (diff)
parent48c1110541a30bb33726a6f46737615b98f1d9c5 (diff)
Merged in fix_indexing_google (pull request #470)
<MIqdad>Fix indexing google
Diffstat (limited to 'src/pages')
-rw-r--r--src/pages/api/shop/product-detail.js30
-rw-r--r--src/pages/google_merchant/products/[page].js4
-rw-r--r--src/pages/google_merchant/products/index.js4
-rw-r--r--src/pages/shop/product/variant/[slug].jsx46
-rw-r--r--src/pages/sitemap/blogs.xml.js6
-rw-r--r--src/pages/sitemap/brands.xml.js6
-rw-r--r--src/pages/sitemap/categories-brand.xml.js6
-rw-r--r--src/pages/sitemap/categories-brand/[page].js6
-rw-r--r--src/pages/sitemap/categories.xml.js6
-rw-r--r--src/pages/sitemap/products.xml.js6
-rw-r--r--src/pages/sitemap/products/[page].js12
11 files changed, 79 insertions, 53 deletions
diff --git a/src/pages/api/shop/product-detail.js b/src/pages/api/shop/product-detail.js
index faa96028..504f9dd6 100644
--- a/src/pages/api/shop/product-detail.js
+++ b/src/pages/api/shop/product-detail.js
@@ -1,26 +1,32 @@
-import { productMappingSolr, variantsMappingSolr } from '@/utils/solrMapping'
-import axios from 'axios'
+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`
- )
+ 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&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)
+ `/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)
+ );
+ res.status(200).json(result);
} catch (error) {
- console.error('Error fetching data from Solr:', error)
- res.status(500).json({ error: 'Internal Server Error' })
+ console.error('Error fetching data from Solr:', error);
+ res.status(500).json({ error: 'Internal Server Error' });
}
}
diff --git a/src/pages/google_merchant/products/[page].js b/src/pages/google_merchant/products/[page].js
index 161b6aec..2a53f7c0 100644
--- a/src/pages/google_merchant/products/[page].js
+++ b/src/pages/google_merchant/products/[page].js
@@ -18,7 +18,9 @@ export async function getServerSideProps({ res, query }) {
page: page.replace('.xml', ''),
priceFrom: 1,
orderBy: 'popular',
- fq: ['image_s:["" TO *] AND publish_b:true'],
+ fq: ['image_s:["" TO *] AND publish_b:true AND price_tier1_v2_f:[1 TO *]'],
+ // product_rating_f: '[8 TO *]',
+ // price_tier1_v2_f: '[1 TO *]',
};
const products = await variantSearchApi({ query: _.toQuery(queries) });
diff --git a/src/pages/google_merchant/products/index.js b/src/pages/google_merchant/products/index.js
index b6c7bfef..d6ef413a 100644
--- a/src/pages/google_merchant/products/index.js
+++ b/src/pages/google_merchant/products/index.js
@@ -8,7 +8,9 @@ export async function getServerSideProps() {
const queries = {
limit: 1,
priceFrom: 1,
- fq: 'image_s:["" TO *] AND publish_b:true',
+ fq: 'image_s:["" TO *] AND publish_b:true AND price_tier1_v2_f:[1 TO *]',
+ // product_rating_f: '[8 TO *]',
+ // price_tier1_v2_f: '[1 TO *]',
};
const products = await variantSearchApi({ query: _.toQuery(queries) });
const { numFound } = products.response;
diff --git a/src/pages/shop/product/variant/[slug].jsx b/src/pages/shop/product/variant/[slug].jsx
index 2c0dd64b..32c00a35 100644
--- a/src/pages/shop/product/variant/[slug].jsx
+++ b/src/pages/shop/product/variant/[slug].jsx
@@ -25,23 +25,39 @@ export async function getServerSideProps(context) {
const tier = auth.pricelist ? auth.pricelist : false;
const authToken = auth?.token || '';
- let response = await axios(
- `${process.env.NEXT_PUBLIC_SELF_HOST}/api/shop/variant-detail?id=` +
- getIdFromSlug(slug) +
- '&auth=' +
- tier
- );
- let product = response.data;
+ try {
+ const response = await axios(
+ `${process.env.NEXT_PUBLIC_SELF_HOST}/api/shop/variant-detail?id=` +
+ getIdFromSlug(slug) +
+ '&auth=' +
+ tier
+ );
- if (product?.length == 1) {
- product = product[0];
- } else {
- product = null;
- }
+ let product = response.data;
- return {
- props: { product },
- };
+ if (product?.length == 1) {
+ product = product[0];
+ } else {
+ product = null;
+ }
+
+ return {
+ props: { product },
+ };
+ } catch (error) {
+ // kalau status 500 → tampilkan halaman 404
+ if (error.response && error.response.status === 500) {
+ return { notFound: true };
+ }
+
+ // kalau 404 dari API juga langsung 404
+ if (error.response && error.response.status === 404) {
+ return { notFound: true };
+ }
+
+ // kalau error lain, lempar agar bisa dilihat di console log server
+ throw error;
+ }
}
export default function ProductDetail({ product }) {
diff --git a/src/pages/sitemap/blogs.xml.js b/src/pages/sitemap/blogs.xml.js
index 628dc710..1125ad1c 100644
--- a/src/pages/sitemap/blogs.xml.js
+++ b/src/pages/sitemap/blogs.xml.js
@@ -10,12 +10,12 @@ export async function getServerSideProps({ res }) {
'http://www.sitemaps.org/schemas/sitemap/0.9'
);
- // const date = new Date()
- const date = '2025-10-30';
+ const date = new Date();
+ // const date = '2025-10-30';
blogs.blogs.forEach((blog) => {
const url = sitemap.ele('url');
url.ele('loc', createSlug(baseUrl, blog.title, blog.id));
- url.ele('lastmod', date);
+ url.ele('lastmod', date.toISOString().slice(0, 10));
url.ele('changefreq', 'weekly');
url.ele('priority', '0.6');
});
diff --git a/src/pages/sitemap/brands.xml.js b/src/pages/sitemap/brands.xml.js
index c2199d85..dc92419c 100644
--- a/src/pages/sitemap/brands.xml.js
+++ b/src/pages/sitemap/brands.xml.js
@@ -10,12 +10,12 @@ export async function getServerSideProps({ res }) {
'http://www.sitemaps.org/schemas/sitemap/0.9'
);
- // const date = new Date()
- const date = '2025-10-30';
+ const date = new Date();
+ // const date = '2025-10-30';
brands.manufactures.forEach((brand) => {
const url = sitemap.ele('url');
url.ele('loc', createSlug(baseUrl, brand.name, brand.id));
- url.ele('lastmod', date);
+ url.ele('lastmod', date.toISOString().slice(0, 10));
url.ele('changefreq', 'daily');
url.ele('priority', '1.0');
});
diff --git a/src/pages/sitemap/categories-brand.xml.js b/src/pages/sitemap/categories-brand.xml.js
index faf67b9f..8dfd3a32 100644
--- a/src/pages/sitemap/categories-brand.xml.js
+++ b/src/pages/sitemap/categories-brand.xml.js
@@ -16,12 +16,12 @@ export async function getServerSideProps({ res }) {
'http://www.sitemaps.org/schemas/sitemap/0.9'
);
- // const date = new Date()
- const date = '2025-10-30';
+ const date = new Date();
+ // const date = '2025-10-30';
pages.forEach((page) => {
const sitemap = sitemapIndex.ele('sitemap');
sitemap.ele('loc', `${baseUrl}/${page}.xml`);
- sitemap.ele('lastmod', date);
+ sitemap.ele('lastmod', date.toISOString().slice(0, 10));
});
res.setHeader('Content-Type', 'text/xml');
diff --git a/src/pages/sitemap/categories-brand/[page].js b/src/pages/sitemap/categories-brand/[page].js
index 4d28ab04..e7f264ee 100644
--- a/src/pages/sitemap/categories-brand/[page].js
+++ b/src/pages/sitemap/categories-brand/[page].js
@@ -22,13 +22,13 @@ export async function getServerSideProps({ query, res }) {
'http://www.sitemaps.org/schemas/sitemap/0.9'
);
- // const date = new Date()
- const date = '2025-10-30';
+ const date = new Date();
+ // const date = '2025-10-30';
categories.data.response.docs.forEach((product) => {
const url = sitemap.ele('url');
const loc = product.url_s;
url.ele('loc', loc);
- url.ele('lastmod', date);
+ url.ele('lastmod', date.toISOString().slice(0, 10));
url.ele('changefreq', 'daily');
url.ele('priority', '0.8');
});
diff --git a/src/pages/sitemap/categories.xml.js b/src/pages/sitemap/categories.xml.js
index 357a2072..18c8a8f3 100644
--- a/src/pages/sitemap/categories.xml.js
+++ b/src/pages/sitemap/categories.xml.js
@@ -28,11 +28,11 @@ export async function getServerSideProps({ res }) {
function addUrlToSitemap(sitemap, name, id) {
const baseUrl = process.env.SELF_HOST + '/shop/category/';
- // const date = new Date()
- const date = '2025-10-30';
+ const date = new Date();
+ // const date = '2025-10-30';
const url = sitemap.ele('url');
url.ele('loc', createSlug(baseUrl, name, id));
- url.ele('lastmod', date);
+ url.ele('lastmod', date.toISOString().slice(0, 10));
url.ele('changefreq', 'weekly');
url.ele('priority', '0.6');
}
diff --git a/src/pages/sitemap/products.xml.js b/src/pages/sitemap/products.xml.js
index 0269ec59..5ed6b759 100644
--- a/src/pages/sitemap/products.xml.js
+++ b/src/pages/sitemap/products.xml.js
@@ -14,12 +14,12 @@ export async function getServerSideProps({ res }) {
'http://www.sitemaps.org/schemas/sitemap/0.9'
);
- // const date = new Date()
- const date = '2025-10-30';
+ const date = new Date();
+ // const date = '2025-10-30';
pages.forEach((page) => {
const sitemap = sitemapIndex.ele('sitemap');
sitemap.ele('loc', `${baseUrl}/${page}.xml`);
- sitemap.ele('lastmod', date);
+ sitemap.ele('lastmod', date.toISOString().slice(0, 10));
});
res.setHeader('Content-Type', 'text/xml');
diff --git a/src/pages/sitemap/products/[page].js b/src/pages/sitemap/products/[page].js
index 421c08e3..3603d64c 100644
--- a/src/pages/sitemap/products/[page].js
+++ b/src/pages/sitemap/products/[page].js
@@ -10,9 +10,9 @@ export async function getServerSideProps({ query, res }) {
const queries = {
limit,
page: page.replace('.xml', ''),
- '-publish_b': false,
- product_rating_f: '[8 TO *]',
- price_tier1_v2_f: '[1 TO *]',
+ // '-publish_b': false,
+ // product_rating_f: '[8 TO *]',
+ // price_tier1_v2_f: '[1 TO *]',
};
const products = await productSearchApi({ query: _.toQuery(queries) });
const sitemap = create('urlset', { encoding: 'utf-8' }).att(
@@ -20,12 +20,12 @@ export async function getServerSideProps({ query, res }) {
'http://www.sitemaps.org/schemas/sitemap/0.9'
);
- // const date = new Date()
- const date = '2025-10-30';
+ const date = new Date();
+ // const date = '2025-10-30';
products.response.products.forEach((product) => {
const url = sitemap.ele('url');
url.ele('loc', createSlug(baseUrl, product.name, product.id));
- url.ele('lastmod', date);
+ url.ele('lastmod', date.toISOString().slice(0, 10));
url.ele('changefreq', 'daily');
url.ele('priority', '0.8');
});