From d163b4ba3382ecad554ae3ea69ff5f3e8338c644 Mon Sep 17 00:00:00 2001
From: taro <taro@taro.codes>
Date: Tue, 4 Mar 2025 03:20:18 -0300
Subject: [PATCH] refactor: userStore, JSON loopback filter, `fields`, etc

---
 src/pages/Ecomerce/PendingOrders.vue | 89 ++++++++++++++++------------
 1 file changed, 52 insertions(+), 37 deletions(-)

diff --git a/src/pages/Ecomerce/PendingOrders.vue b/src/pages/Ecomerce/PendingOrders.vue
index 43050872..b8410528 100644
--- a/src/pages/Ecomerce/PendingOrders.vue
+++ b/src/pages/Ecomerce/PendingOrders.vue
@@ -1,5 +1,5 @@
 <script setup>
-import { ref, inject, onMounted } from 'vue';
+import { ref, inject, watch } from 'vue';
 import { useI18n } from 'vue-i18n';
 import { useRouter } from 'vue-router';
 
@@ -10,6 +10,7 @@ import { currency, formatDateTitle } from 'src/lib/filters.js';
 import { useVnConfirm } from 'src/composables/useVnConfirm.js';
 import useNotify from 'src/composables/useNotify.js';
 import { useAppStore } from 'stores/app';
+import { useUserStore } from 'stores/user';
 import { storeToRefs } from 'pinia';
 
 const jApi = inject('jApi');
@@ -18,6 +19,7 @@ const { t } = useI18n();
 const { openConfirmationModal } = useVnConfirm();
 const { notify } = useNotify();
 const appStore = useAppStore();
+const userStore = useUserStore();
 const { isHeaderMounted } = storeToRefs(appStore);
 const router = useRouter();
 
@@ -27,49 +29,55 @@ const orders = ref([]);
 const getOrders = async () => {
     try {
         loading.value = true;
-        const ordersResponse = await jApi.query(
-            `SELECT o.id, o.sent, o.deliveryMethodFk, o.taxableBase,
-            a.nickname, am.description agency
-            FROM myOrder o
-            JOIN myAddress a ON a.id = o.addressFk
-            JOIN vn.agencyMode am ON am.id = o.agencyModeFk
-            WHERE NOT o.isConfirmed
-            ORDER BY o.sent DESC`
-        );
-        console.log('old ordersResponse', ordersResponse);
-        // orders.value = ordersResponse;
 
-        const userId = await jApi.getValue('select account.myUser_getId()');
-        console.log('userId', userId);
+        const clientFk = userStore?.user?.id;
 
-        // const userId = 9;
-        const queryParams = new URLSearchParams([
-          ['filter[include]', 'address'],
-          ['filter[include]', 'agencyMode'],
-          ['filter[where][isConfirmed]', 0],
-          ['filter[where][source_app]', 'WEB'],
-          ['filter[where][clientFk]', userId], // order.customer_id in DB, renamed in loopback to clientFk
-          ['filter[where][address.clientFk]', userId], // address.clientFk
-        ]);
-        const salixUrl = `Orders?${queryParams}`;
+        const filter = {
+          where: {
+            clientFk,
+            'address.clientFk': clientFk,
+            isConfirmed: 0,
+            source_app: 'WEB',
+          },
+          include: [
+            {
+              relation: 'address',
+              scope: {
+                fields: ['nickname', 'city'],
+              }
+            },
+            {
+              relation: 'agencyMode',
+              scope: {
+                fields: ['description'],
+              }
+            },
+          ],
+          fields: [
+            'id',
+            'landed',
+            'delivery_method_id',
+            'taxableBase',
+            'addressFk',
+            'agencyModeFk'
+          ]
+        };
 
-        console.log('salixUrl', salixUrl);
+        const { data: salixOrders } = await api.get('Orders', {
+          params: {
+            filter: JSON.stringify(filter)
+          }
+        });
 
-        const salixOrders = await api.get(salixUrl);
-
-        console.log('salixOrders', salixOrders);
-
-        const salixOrdersMapped = salixOrders.data.map(order => ({
+        const salixOrdersMapped = salixOrders.map(order => ({
           id: order.id,
-          sent: order.landed, // the other API converts it to a js Date automagically!
+          sent: order.landed,
           deliveryMethodFk: order.delivery_method_id,
-          taxableBase: order.taxableBase, // currently missing from the salix mapping
+          taxableBase: order.taxableBase,
           nickname: order.address.nickname,
           agency: order.agencyMode.description,
         }))
 
-        console.log('salixOrdersMapped', salixOrdersMapped);
-
         orders.value = salixOrdersMapped;
 
         loading.value = false;
@@ -100,9 +108,16 @@ const loadOrder = orderId => {
     router.push({ name: 'catalog' });
 };
 
-onMounted(async () => {
-    getOrders();
-});
+watch(
+  () => userStore?.user?.id,
+  async userId => {
+    if (userId) {
+      getOrders();
+    }
+  },
+  { immediate: true }
+);
+
 </script>
 
 <template>