summaryrefslogtreecommitdiff
path: root/src2/pages/api
diff options
context:
space:
mode:
authorIT Fixcomart <it@fixcomart.co.id>2023-03-01 09:18:52 +0000
committerIT Fixcomart <it@fixcomart.co.id>2023-03-01 09:18:52 +0000
commita7abbf4ddc70068620e9f44b74dc162ce2e16ee2 (patch)
tree74f66253717515d364ce74bd8275015c1f829cbc /src2/pages/api
parent90e1edab9b6a8ccc09a49fed3addbec2cbc4e4c3 (diff)
parenta1b9b647a6c4bda1f5db63879639d44543f9557e (diff)
Merged in refactor (pull request #1)
Refactor
Diffstat (limited to 'src2/pages/api')
-rw-r--r--src2/pages/api/activation-request.js31
-rw-r--r--src2/pages/api/activation.js16
-rw-r--r--src2/pages/api/login.js15
-rw-r--r--src2/pages/api/register.js15
-rw-r--r--src2/pages/api/shop/search.js96
-rw-r--r--src2/pages/api/shop/suggest.js12
-rw-r--r--src2/pages/api/token.js10
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