1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
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;
});
};
|