diff options
| author | trisusilo48 <tri.susilo@altama.co.id> | 2024-11-18 10:36:02 +0700 |
|---|---|---|
| committer | trisusilo48 <tri.susilo@altama.co.id> | 2024-11-18 10:36:02 +0700 |
| commit | db001188928e2ea15c9c42c4768b9fae884da90f (patch) | |
| tree | f463420253848c40ea34887b654b5afa8f7aa6e1 /src/pages/api | |
| parent | ee02e383573a901f2da1206c4b59307a8d0c597e (diff) | |
| parent | c3ff9d2b35efd260bf7bfa7cc924ed05b8f9418f (diff) | |
Merge branch 'new-release' of https://bitbucket.org/altafixco/next-indoteknik into new-release
Diffstat (limited to 'src/pages/api')
| -rw-r--r-- | src/pages/api/shop/brands.js | 9 | ||||
| -rw-r--r-- | src/pages/api/shop/preferredBrand.js | 61 | ||||
| -rw-r--r-- | src/pages/api/shop/search.js | 4 |
3 files changed, 63 insertions, 11 deletions
diff --git a/src/pages/api/shop/brands.js b/src/pages/api/shop/brands.js index 219f2cb0..d56e4b13 100644 --- a/src/pages/api/shop/brands.js +++ b/src/pages/api/shop/brands.js @@ -38,19 +38,10 @@ export default async function handler(req, res) { } if (req.query.rows) rows = req.query.rows; - const cacheKey = `brands_home`; - let cachedData = await client.get(cacheKey); - - if (cachedData) { - return res.status(200).json(JSON.parse(cachedData)); - } - const url = `${SOLR_HOST}/solr/brands/select?q=${params}&q.op=OR&indent=true&rows=${rows}&${sort}`; const brands = await axios(url); const dataBrands = responseMap(brands.data.response.docs); - await client.set(cacheKey, JSON.stringify(dataBrands), 'EX', 259200); - res.status(200).json(dataBrands); } catch (error) { console.error('Error fetching data from Solr:', error); diff --git a/src/pages/api/shop/preferredBrand.js b/src/pages/api/shop/preferredBrand.js new file mode 100644 index 00000000..4cb35c84 --- /dev/null +++ b/src/pages/api/shop/preferredBrand.js @@ -0,0 +1,61 @@ +import axios from 'axios'; +import { createClient } from 'redis'; + +const SOLR_HOST = process.env.SOLR_HOST; +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) { + await connectRedis(); + + try { + let params = '*:*'; + let sort = + 'sort=if(exists(sequence_i),0,1) asc,sequence_i asc, if(exists(image_s),0,1) asc '; + let rows = 20; + + if (req.query.params) { + rows = 20; + switch (req.query.params) { + case 'level_s': + params = 'level_s:prioritas'; + break; + case 'search': + params = `name_s:"${req.query.q.toLowerCase()}"`; + sort = ''; + rows = 1; + break; + default: + params = `name_s:${req.query.params}`.toLowerCase(); + } + } + if (req.query.rows) rows = req.query.rows; + + const url = `${SOLR_HOST}/solr/brands/select?q=${params}&q.op=OR&indent=true&rows=${rows}&${sort}`; + const brands = await axios(url); + const dataBrands = responseMap(brands.data.response.docs); + + res.status(200).json(dataBrands); + } catch (error) { + console.error('Error fetching data from Solr:', error); + res.status(500).json({ error: 'Internal Server Error' }); + } +} + +const responseMap = (brands) => { + return brands.map((brand) => { + return { + id: brand.id, + name: brand.display_name_s, + logo: brand.image_s || '', + sequence: brand.sequence_i || '', + }; + }); +}; diff --git a/src/pages/api/shop/search.js b/src/pages/api/shop/search.js index a789b469..4fc2ab2b 100644 --- a/src/pages/api/shop/search.js +++ b/src/pages/api/shop/search.js @@ -90,8 +90,8 @@ export default async function handler(req, res) { ]; if (fq && source != 'similar') { - // filterQueries.push(fq); - fq.push(...filterQueries); + filterQueries.push(fq); + // fq.push(...filterQueries); } const fq_ = filterQueries.join(' AND '); |
