import odooApi from '@/core/api/odooApi'; import { createClient } from 'redis'; import _ from 'lodash-contrib'; import axios from 'axios'; const client = createClient(); client.on('error', (err) => console.error('Redis Client Error', err)); const connectRedis = async () => { if (!client.isOpen) { await client.connect(); } }; export default async function handler(req, res) { const { query, operation, duration } = req.query; res.setHeader('Cache-Control', 'no-store'); try { await connectRedis(); const cacheKey = `flashsale_product:${operation}:${query}`; let cachedData = await client.get(cacheKey); if (cachedData) { const data = JSON.parse(cachedData); if (!data || (Array.isArray(data) && data.length === 0)) { await client.del(cacheKey); return res.status(200).json({ data: [] }); } return res.status(200).json({ data }); } else { const qstr = String(query || '').replace(/^\?/, ''); const dataProductSearch = await axios( `${process.env.NEXT_PUBLIC_SELF_HOST}/api/shop/search?${qstr}&operation=${operation}` ); const payload = dataProductSearch.data; const arr = Array.isArray(payload) ? payload : payload?.data || []; if (arr.length === 0) { return res.status(200).json({ data: [] }); } else { await client.set( cacheKey, JSON.stringify(arr), 'EX', Math.max(1, parseInt(String(duration), 10) || 300) ); cachedData = await client.get(cacheKey); return res.status(200).json({ data: JSON.parse(cachedData) }); } } } catch (error) { console.error('Error interacting with Redis or fetching data:', error); return res.status(500).json({ error: 'Internal Server Error' }); } }