diff options
| author | IT Fixcomart <it@fixcomart.co.id> | 2023-03-01 09:18:52 +0000 |
|---|---|---|
| committer | IT Fixcomart <it@fixcomart.co.id> | 2023-03-01 09:18:52 +0000 |
| commit | a7abbf4ddc70068620e9f44b74dc162ce2e16ee2 (patch) | |
| tree | 74f66253717515d364ce74bd8275015c1f829cbc /src2/pages/api | |
| parent | 90e1edab9b6a8ccc09a49fed3addbec2cbc4e4c3 (diff) | |
| parent | a1b9b647a6c4bda1f5db63879639d44543f9557e (diff) | |
Merged in refactor (pull request #1)
Refactor
Diffstat (limited to 'src2/pages/api')
| -rw-r--r-- | src2/pages/api/activation-request.js | 31 | ||||
| -rw-r--r-- | src2/pages/api/activation.js | 16 | ||||
| -rw-r--r-- | src2/pages/api/login.js | 15 | ||||
| -rw-r--r-- | src2/pages/api/register.js | 15 | ||||
| -rw-r--r-- | src2/pages/api/shop/search.js | 96 | ||||
| -rw-r--r-- | src2/pages/api/shop/suggest.js | 12 | ||||
| -rw-r--r-- | src2/pages/api/token.js | 10 |
7 files changed, 195 insertions, 0 deletions
diff --git a/src2/pages/api/activation-request.js b/src2/pages/api/activation-request.js new file mode 100644 index 00000000..3f33875c --- /dev/null +++ b/src2/pages/api/activation-request.js @@ -0,0 +1,31 @@ +import apiOdoo from "@/core/utils/apiOdoo"; +import mailer from "@/core/utils/mailer"; + +export default async function handler(req, res) { + try { + const { email } = req.body; + let result = await apiOdoo( + 'POST', + '/api/v1/user/activation-request', + {email} + ); + if (result.activation_request) { + mailer.sendMail({ + from: 'sales@indoteknik.com', + to: result.user.email, + subject: 'Permintaan Aktivasi Akun Indoteknik', + html: ` + <h1>Permintaan Aktivasi Akun Indoteknik</h1> + <br> + <p>Aktivasi akun anda melalui link berikut: <a href="${process.env.SELF_HOST}/activate?token=${result.token}">Aktivasi Akun</a></p> + ` + }); + } + delete result.user; + delete result.token; + res.status(200).json(result); + } catch (error) { + console.log(error); + res.status(400).json({ error: error.message }); + } +}
\ No newline at end of file diff --git a/src2/pages/api/activation.js b/src2/pages/api/activation.js new file mode 100644 index 00000000..8b22af8d --- /dev/null +++ b/src2/pages/api/activation.js @@ -0,0 +1,16 @@ +import apiOdoo from "@/core/utils/apiOdoo"; + +export default async function handler(req, res) { + try { + const { token } = req.body; + let result = await apiOdoo( + 'POST', + '/api/v1/user/activation', + {token} + ); + res.status(200).json(result); + } catch (error) { + console.log(error); + res.status(400).json({ error: error.message }); + } +}
\ No newline at end of file diff --git a/src2/pages/api/login.js b/src2/pages/api/login.js new file mode 100644 index 00000000..e02a73cb --- /dev/null +++ b/src2/pages/api/login.js @@ -0,0 +1,15 @@ +import apiOdoo from "@/core/utils/apiOdoo"; + +export default async function handler(req, res) { + try { + const { email, password } = req.body; + let result = await apiOdoo( + 'POST', + '/api/v1/user/login', + {email, password} + ); + res.status(200).json(result); + } catch (error) { + res.status(400).json({ error: error.message }); + } +}
\ No newline at end of file diff --git a/src2/pages/api/register.js b/src2/pages/api/register.js new file mode 100644 index 00000000..7c8d8b39 --- /dev/null +++ b/src2/pages/api/register.js @@ -0,0 +1,15 @@ +import apiOdoo from "@/core/utils/apiOdoo"; + +export default async function handler(req, res) { + try { + const { email, name, password } = req.body; + let result = await apiOdoo( + 'POST', + '/api/v1/user/register', + {email, name, password} + ); + res.status(200).json(result); + } catch (error) { + res.status(400).json({ error: error.message }); + } +}
\ No newline at end of file diff --git a/src2/pages/api/shop/search.js b/src2/pages/api/shop/search.js new file mode 100644 index 00000000..ad986c86 --- /dev/null +++ b/src2/pages/api/shop/search.js @@ -0,0 +1,96 @@ +import axios from "axios"; + +const productResponseMap = (products) => { + return products.map((product) => { + let productMapped = { + id: product.product_id ? product.product_id[0] : '', + image: product.image ? product.image[0] : '', + code: product.default_code ? product.default_code[0] : '', + name: product.product_name ? product.product_name[0] : '', + lowest_price: { + price: product.price ? product.price[0] : 0, + price_discount: product.price_discount ? product.price_discount[0] : 0, + discount_percentage: product.discount ? product.discount[0] : 0, + }, + variant_total: product.variant_total ? product.variant_total[0] : 0, + stock_total: product.stock_total ? product.stock_total[0] : 0, + weight: product.weight ? product.weight[0] : 0, + manufacture: {}, + categories: [], + }; + + if (product.manufacture_id && product.brand) { + productMapped.manufacture = { + id: product.manufacture_id ? product.manufacture_id[0] : '', + name: product.brand ? product.brand[0] : '', + }; + } + + productMapped.categories = [ + { + id: product.category_id ? product.category_id[0] : '', + name: product.category_name ? product.category_name[0] : '', + } + ]; + + return productMapped; + }); +} + +export default async function handler(req, res) { + const { + q, + page = 1, + brand = '', + category = '', + price_from = 0, + price_to = 0, + order_by = '' + } = req.query; + + let paramOrderBy = ''; + switch (order_by) { + case 'price-asc': + paramOrderBy = ', price_discount ASC'; + break; + case 'price-desc': + paramOrderBy = ', price_discount DESC'; + break; + case 'popular': + paramOrderBy = ', search_rank DESC'; + break; + case 'stock': + paramOrderBy = ', stock_total DESC'; + break; + } + + let limit = 30; + let offset = (page - 1) * limit; + let parameter = [ + `facet.query=${q}`, + 'facet=true', + 'indent=true', + 'q.op=AND', + `q=${q}`, + 'facet.field=brand_str', + 'facet.field=category_name_str', + `start=${offset}`, + `rows=${limit}`, + `sort=product_rating DESC ${paramOrderBy}`, + `fq=price_discount:[${price_from == '' ? '*' : price_from} TO ${price_to == '' ? '*' : price_to}]` + ]; + + if (brand) parameter.push(`fq=brand:${brand}`); + if (category) parameter.push(`fq=category_name:${category}`); + + let result = await axios(process.env.SOLR_HOST + '/solr/products/select?' + parameter.join('&')); + try { + result.data.response.products = productResponseMap(result.data.response.docs); + result.data.responseHeader.params.start = parseInt(result.data.responseHeader.params.start); + result.data.responseHeader.params.rows = parseInt(result.data.responseHeader.params.rows); + delete result.data.response.docs; + res.status(200).json(result.data); + } catch (error) { + res.status(400).json({ error: error.message }); + } +}
\ No newline at end of file diff --git a/src2/pages/api/shop/suggest.js b/src2/pages/api/shop/suggest.js new file mode 100644 index 00000000..6db1a851 --- /dev/null +++ b/src2/pages/api/shop/suggest.js @@ -0,0 +1,12 @@ +import axios from "axios"; + +export default async function handler(req, res) { + const { q } = req.query; + + let result = await axios(process.env.SOLR_HOST + `/solr/products/suggest?suggest=true&suggest.dictionary=mySuggester&suggest.q=${q}`); + try { + res.status(200).json(result.data); + } catch (error) { + res.status(400).json({ error: error.message }); + } +}
\ No newline at end of file diff --git a/src2/pages/api/token.js b/src2/pages/api/token.js new file mode 100644 index 00000000..ec048158 --- /dev/null +++ b/src2/pages/api/token.js @@ -0,0 +1,10 @@ +import axios from "axios"; + +export default async function handler(req, res) { + try { + let result = await axios.get(process.env.ODOO_HOST + '/api/token'); + res.status(200).json(result.data.result); + } catch (error) { + res.status(400).json({ error: error.message }); + } +}
\ No newline at end of file |
