refactor: userStore, JSON loopback filter, `fields`, etc

This commit is contained in:
taro 2025-03-04 03:20:18 -03:00
parent fefb3dab1f
commit d163b4ba33
1 changed files with 52 additions and 37 deletions

View File

@ -1,5 +1,5 @@
<script setup> <script setup>
import { ref, inject, onMounted } from 'vue'; import { ref, inject, watch } from 'vue';
import { useI18n } from 'vue-i18n'; import { useI18n } from 'vue-i18n';
import { useRouter } from 'vue-router'; 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 { useVnConfirm } from 'src/composables/useVnConfirm.js';
import useNotify from 'src/composables/useNotify.js'; import useNotify from 'src/composables/useNotify.js';
import { useAppStore } from 'stores/app'; import { useAppStore } from 'stores/app';
import { useUserStore } from 'stores/user';
import { storeToRefs } from 'pinia'; import { storeToRefs } from 'pinia';
const jApi = inject('jApi'); const jApi = inject('jApi');
@ -18,6 +19,7 @@ const { t } = useI18n();
const { openConfirmationModal } = useVnConfirm(); const { openConfirmationModal } = useVnConfirm();
const { notify } = useNotify(); const { notify } = useNotify();
const appStore = useAppStore(); const appStore = useAppStore();
const userStore = useUserStore();
const { isHeaderMounted } = storeToRefs(appStore); const { isHeaderMounted } = storeToRefs(appStore);
const router = useRouter(); const router = useRouter();
@ -27,49 +29,55 @@ const orders = ref([]);
const getOrders = async () => { const getOrders = async () => {
try { try {
loading.value = true; 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()'); const clientFk = userStore?.user?.id;
console.log('userId', userId);
// const userId = 9; const filter = {
const queryParams = new URLSearchParams([ where: {
['filter[include]', 'address'], clientFk,
['filter[include]', 'agencyMode'], 'address.clientFk': clientFk,
['filter[where][isConfirmed]', 0], isConfirmed: 0,
['filter[where][source_app]', 'WEB'], source_app: 'WEB',
['filter[where][clientFk]', userId], // order.customer_id in DB, renamed in loopback to clientFk },
['filter[where][address.clientFk]', userId], // address.clientFk include: [
]); {
const salixUrl = `Orders?${queryParams}`; 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); const salixOrdersMapped = salixOrders.map(order => ({
console.log('salixOrders', salixOrders);
const salixOrdersMapped = salixOrders.data.map(order => ({
id: order.id, id: order.id,
sent: order.landed, // the other API converts it to a js Date automagically! sent: order.landed,
deliveryMethodFk: order.delivery_method_id, deliveryMethodFk: order.delivery_method_id,
taxableBase: order.taxableBase, // currently missing from the salix mapping taxableBase: order.taxableBase,
nickname: order.address.nickname, nickname: order.address.nickname,
agency: order.agencyMode.description, agency: order.agencyMode.description,
})) }))
console.log('salixOrdersMapped', salixOrdersMapped);
orders.value = salixOrdersMapped; orders.value = salixOrdersMapped;
loading.value = false; loading.value = false;
@ -100,9 +108,16 @@ const loadOrder = orderId => {
router.push({ name: 'catalog' }); router.push({ name: 'catalog' });
}; };
onMounted(async () => { watch(
getOrders(); () => userStore?.user?.id,
}); async userId => {
if (userId) {
getOrders();
}
},
{ immediate: true }
);
</script> </script>
<template> <template>