import { createClient } from 'redis'; // import { fetchCategoryManagementSolr } from '../../lib/home/api/categoryManagementApi'; 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) { try { await connectRedis(); // await client.del('homepage_categoryDynamic'); let cachedData; if (req.method === 'GET') { cachedData = await client.get('homepage_categoryDynamic'); if (!cachedData) { const items = await fetchCategoryManagementSolr(); await client.set( 'homepage_categoryDynamic', JSON.stringify(items), 'EX', 259200 // Expiry 3 hari ); cachedData = await client.get('homepage_categoryDynamic'); } const data = cachedData ? JSON.parse(cachedData) : null; res.status(200).json({ data }); } else { res.setHeader('Allow', ['GET']); res.status(405).end(`Method ${req.method} Not Allowed`); } } catch (error) { console.error('Error interacting with Redis:', error); res.status(500).json({ error: 'Error interacting with Redis' }); } } const fetchCategoryManagementSolr = async () => { let sort = 'sort=sequence_i asc'; try { const response = await fetch( `http://34.101.189.218:8983/solr/category_management/query?q=*:*&q.op=OR&indent=true&${sort}&&rows=20` ); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } const data = await response.json(); const promotions = await map(data.response.docs); return promotions; } catch (error) { console.error('Error fetching promotion data:', error); return []; } }; const map = async (promotions) => { return promotions.map((promotion) => { let parsedCategories = promotion.categories.map((category) => { // Parse string JSON utama let parsedCategory = JSON.parse(category); // Parse setiap elemen di child_frontend_id_i jika ada if (parsedCategory.child_frontend_id_i) { parsedCategory.child_frontend_id_i = parsedCategory.child_frontend_id_i.map((child) => JSON.parse(child)); } return parsedCategory; }); let productMapped = { id: promotion.id, name: promotion.name_s, image: promotion.image_s, sequence: promotion.sequence_i, numFound: promotion.numFound_i, categories: parsedCategories, category_id: promotion.category_id_i, }; return productMapped; }); };