summaryrefslogtreecommitdiff
path: root/src/pages/api
diff options
context:
space:
mode:
Diffstat (limited to 'src/pages/api')
-rw-r--r--src/pages/api/banner-section.js74
-rw-r--r--src/pages/api/flashsale-header.js2
-rw-r--r--src/pages/api/shop/search.js5
3 files changed, 72 insertions, 9 deletions
diff --git a/src/pages/api/banner-section.js b/src/pages/api/banner-section.js
index 7d7040c0..ab48f3f4 100644
--- a/src/pages/api/banner-section.js
+++ b/src/pages/api/banner-section.js
@@ -12,22 +12,81 @@ const connectRedis = async () => {
};
export default async function handler(req, res) {
+ if (req.method !== 'GET') {
+ return res.status(405).json({ error: 'Method not allowed' });
+ }
+
try {
await connectRedis();
- const cacheKey = 'hero-banner';
- // await client.del(cacheKey);
+
+ const type = req.query.type || 'home-banner';
+
+ if (type === 'private-brand') {
+ // Handle multiple private brand banner types
+ const bannerTypes = [
+ 'banner-brand-footer',
+ 'banner-brand-tengah-footer',
+ 'banner-brand-kanan-footer',
+ ];
+
+ const allBanners = [];
+
+ for (const brandType of bannerTypes) {
+ const brandCacheKey = `homepage_bannerSection_${brandType}`;
+
+ let cachedData = await client.get(brandCacheKey);
+
+ if (cachedData) {
+ const data = JSON.parse(cachedData);
+ allBanners.push(...(data || []));
+ } else {
+ try {
+ const dataBannerSections = await odooApi(
+ 'GET',
+ `/api/v1/banner?type=${brandType}`
+ );
+
+ if (dataBannerSections && dataBannerSections.length > 0) {
+ await client.set(
+ brandCacheKey,
+ JSON.stringify(dataBannerSections),
+ 'EX',
+ 259200
+ );
+ allBanners.push(...dataBannerSections);
+ }
+ } catch (error) {
+ continue;
+ }
+ }
+ }
+
+ return res.status(200).json({
+ data: allBanners,
+ total: allBanners.length,
+ });
+ }
+
+ // Handle home-banner and other single types
+ let cacheKey;
+ let apiEndpoint;
+
+ if (type === 'home-banner') {
+ cacheKey = 'hero-banner';
+ apiEndpoint = '/api/v1/banner?type=home-banner';
+ } else {
+ cacheKey = `homepage_bannerSection_${type}`;
+ apiEndpoint = `/api/v1/banner?type=${type}`;
+ }
+
let cachedData = await client.get(cacheKey);
if (cachedData) {
const data = JSON.parse(cachedData);
return res.status(200).json({ data });
} else {
- const dataBannerSections = await odooApi(
- 'GET',
- '/api/v1/banner?type=home-banner'
- );
+ const dataBannerSections = await odooApi('GET', apiEndpoint);
- // Simpan hasil fetch ke Redis dengan masa kadaluarsa 3 hari (259200 detik)
await client.set(
cacheKey,
JSON.stringify(dataBannerSections),
@@ -38,7 +97,6 @@ export default async function handler(req, res) {
return res.status(200).json({ data: dataBannerSections });
}
} catch (error) {
- console.error('Error interacting with Redis or fetching data:', error);
return res.status(500).json({ error: 'Internal Server Error' });
}
}
diff --git a/src/pages/api/flashsale-header.js b/src/pages/api/flashsale-header.js
index 578801ae..916a9cd2 100644
--- a/src/pages/api/flashsale-header.js
+++ b/src/pages/api/flashsale-header.js
@@ -35,7 +35,7 @@ export default async function handler(req, res) {
}
return res.status(200).json({ data });
} else {
- const flashSale = await odooApi('GET', `/api/v1/flashsale/header`);
+ const flashSale = await odooApi('GET', `/api/v1/flashsale/header?is_show_program=true`);
if (flashSale.length === 0) {
return res.status(200).json({ data: [] });
} else {
diff --git a/src/pages/api/shop/search.js b/src/pages/api/shop/search.js
index 63ec7ca0..e14b0ca2 100644
--- a/src/pages/api/shop/search.js
+++ b/src/pages/api/shop/search.js
@@ -19,6 +19,7 @@ export default async function handler(req, res) {
source = '',
} = req.query;
+
let { stock = '' } = req.query;
let paramOrderBy = '';
switch (orderBy) {
@@ -88,6 +89,10 @@ export default async function handler(req, res) {
'price_tier1_v2_f:[1 TO *]',
];
+ if (orderBy === 'stock') {
+ filterQueries.push('stock_total_f:{0 TO *}');
+ }
+
if (fq && source != 'similar' && typeof fq != 'string') {
// filterQueries.push(fq);
fq.push(...filterQueries);