From 6d6322b0cd0ef1410d9747112756516f9fbd8daa Mon Sep 17 00:00:00 2001 From: Mono Mono Date: Sat, 11 Jan 2025 10:37:17 -0500 Subject: [PATCH 1/7] #84 refactor(frontend): extract methods to repository. --- .../don-confiao/src/components/Purchase.vue | 55 +++++++++---------- .../frontend/don-confiao/src/main.js | 8 ++- .../src/services/api-implementation.js | 21 +++++++ .../frontend/don-confiao/src/services/api.js | 19 +++++++ .../don-confiao/src/services/django-api.js | 42 ++++++++++++++ 5 files changed, 116 insertions(+), 29 deletions(-) create mode 100644 tienda_ilusion/don_confiao/frontend/don-confiao/src/services/api-implementation.js create mode 100644 tienda_ilusion/don_confiao/frontend/don-confiao/src/services/api.js create mode 100644 tienda_ilusion/don_confiao/frontend/don-confiao/src/services/django-api.js diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/components/Purchase.vue b/tienda_ilusion/don_confiao/frontend/don-confiao/src/components/Purchase.vue index 0747b8a..19c112d 100644 --- a/tienda_ilusion/don_confiao/frontend/don-confiao/src/components/Purchase.vue +++ b/tienda_ilusion/don_confiao/frontend/don-confiao/src/components/Purchase.vue @@ -147,10 +147,11 @@ diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/main.js b/tienda_ilusion/don_confiao/frontend/don-confiao/src/main.js index d31eee2..cab013c 100644 --- a/tienda_ilusion/don_confiao/frontend/don-confiao/src/main.js +++ b/tienda_ilusion/don_confiao/frontend/don-confiao/src/main.js @@ -9,11 +9,17 @@ import { registerPlugins } from '@/plugins' // Components import App from './App.vue' +import ApiImplementation from './services/api-implementation'; // Composables import { createApp } from 'vue' -const app = createApp(App) +process.env.API_IMPLEMENTATION = 'django'; +let apiImplementation = new ApiImplementation(); +const api = apiImplementation.getApi(); + +const app = createApp(App); +app.provide('api', api); registerPlugins(app) diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/services/api-implementation.js b/tienda_ilusion/don_confiao/frontend/don-confiao/src/services/api-implementation.js new file mode 100644 index 0000000..0bbbec6 --- /dev/null +++ b/tienda_ilusion/don_confiao/frontend/don-confiao/src/services/api-implementation.js @@ -0,0 +1,21 @@ +import DjangoApi from './django-api'; +import Api from './api'; + +class ApiImplementation { + constructor() { + const implementation = process.env.API_IMPLEMENTATION; + let apiImplementation; + if (implementation === 'django') { + apiImplementation = new DjangoApi(); + } else { + throw new Error("API implementation don't configured"); + } + this.api = new Api(apiImplementation); + } + + getApi() { + return this.api; + } +} + +export default ApiImplementation; diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/services/api.js b/tienda_ilusion/don_confiao/frontend/don-confiao/src/services/api.js new file mode 100644 index 0000000..d783b0b --- /dev/null +++ b/tienda_ilusion/don_confiao/frontend/don-confiao/src/services/api.js @@ -0,0 +1,19 @@ +class Api { + constructor (apiImplementation) { + this.apiImplementation = apiImplementation; + } + + getCustomers() { + return this.apiImplementation.getCustomers(); + } + + getProducts() { + return this.apiImplementation.getProducts(); + } + + getPaymentMethods() { + return this.apiImplementation.getPaymentMethods(); + } +} + +export default Api; diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/services/django-api.js b/tienda_ilusion/don_confiao/frontend/don-confiao/src/services/django-api.js new file mode 100644 index 0000000..756bfcf --- /dev/null +++ b/tienda_ilusion/don_confiao/frontend/don-confiao/src/services/django-api.js @@ -0,0 +1,42 @@ +class DjangoApi { + getCustomers() { + return new Promise((resolve, reject) => { + fetch('/don_confiao/api/customers/') + .then(response => response.json()) + .then(data => { + resolve(data); + }) + .catch(error => { + reject(error); + }); + }); + } + + getProducts() { + return new Promise((resolve, reject) => { + fetch('/don_confiao/api/products/') + .then(response => response.json()) + .then(data => { + resolve(data); + }) + .catch(error => { + reject(error); + }); + }); + } + + getPaymentMethods() { + return new Promise((resolve, reject) => { + fetch('/don_confiao/payment_methods/all/select_format') + .then(response => response.json()) + .then(data => { + resolve(data); + }) + .catch(error => { + reject(error); + }); + }); + } +} + +export default DjangoApi; From fcb83d05fbbb2857b5ee7207ba6b553d5314a867 Mon Sep 17 00:00:00 2001 From: Mono Mono Date: Sat, 11 Jan 2025 11:34:37 -0500 Subject: [PATCH 2/7] #84 refactor(frontend): send purchase moved to repository. --- .../don-confiao/src/components/Purchase.vue | 32 ++++++------------- .../frontend/don-confiao/src/services/api.js | 4 +++ .../don-confiao/src/services/django-api.js | 25 +++++++++++++++ 3 files changed, 39 insertions(+), 22 deletions(-) diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/components/Purchase.vue b/tienda_ilusion/don_confiao/frontend/don-confiao/src/components/Purchase.vue index 19c112d..400e8a2 100644 --- a/tienda_ilusion/don_confiao/frontend/don-confiao/src/components/Purchase.vue +++ b/tienda_ilusion/don_confiao/frontend/don-confiao/src/components/Purchase.vue @@ -309,28 +309,16 @@ }, async submit() { this.$refs.purchase.validate(); - if (this.valid) { - try { - const response = await fetch('/don_confiao/api/sales/', { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify(this.purchase), - }); - if (response.ok) { - const data = await response.json(); - console.log('Compra enviada:', data); - this.$router.push({ - path: "/summary_purchase", - query : {id: parseInt(data.id)} - }); - } else { - console.error('Error al enviar la compra:', response.statusText); - } - } catch (error) { - console.error('Error de red:', error); - } + if (this.valid) { + this.api.createPurchase(this.purchase) + .then(data => { + console.log('Compra enviada:', data); + this.$router.push({ + path: "/summary_purchase", + query : {id: parseInt(data.id)} + }); + }) + .catch(error => console.error('Error al enviarl la compra:', error)); } else { this.show_alert_purchase = true; setTimeout(() => { diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/services/api.js b/tienda_ilusion/don_confiao/frontend/don-confiao/src/services/api.js index d783b0b..46d54be 100644 --- a/tienda_ilusion/don_confiao/frontend/don-confiao/src/services/api.js +++ b/tienda_ilusion/don_confiao/frontend/don-confiao/src/services/api.js @@ -14,6 +14,10 @@ class Api { getPaymentMethods() { return this.apiImplementation.getPaymentMethods(); } + + createPurchase(purchase) { + return this.apiImplementation.createPurchase(purchase); + } } export default Api; diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/services/django-api.js b/tienda_ilusion/don_confiao/frontend/don-confiao/src/services/django-api.js index 756bfcf..5e716d6 100644 --- a/tienda_ilusion/don_confiao/frontend/don-confiao/src/services/django-api.js +++ b/tienda_ilusion/don_confiao/frontend/don-confiao/src/services/django-api.js @@ -37,6 +37,31 @@ class DjangoApi { }); }); } + + createPurchase(purchase) { + return new Promise((resolve, reject) => { + console.log('compra a enviar:', purchase); + fetch('/don_confiao/api/sales/', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify(purchase), + }).then(response => { + if (!response.ok) { + reject(new Error(`Error ${response.status}: ${response.statusText}`)); + } else { + response.json().then(data => { + if (!data) { + reject(new Error('La respuesta no es un JSON válido')); + } else { + resolve(data); + } + }); + } + }).catch(error => reject(error)); + }); + } } export default DjangoApi; From 8f9917c3a4a3c8e5cd9180829a6108f625531070 Mon Sep 17 00:00:00 2001 From: Mono Mono Date: Sat, 11 Jan 2025 12:14:48 -0500 Subject: [PATCH 3/7] #84 refactor(frontend): summaryPurchase moved to repository. --- .../don-confiao/src/components/SummaryPurchase.vue | 6 ++++-- .../frontend/don-confiao/src/services/api.js | 4 ++++ .../frontend/don-confiao/src/services/django-api.js | 13 +++++++++++++ 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/components/SummaryPurchase.vue b/tienda_ilusion/don_confiao/frontend/don-confiao/src/components/SummaryPurchase.vue index d43fa84..07a37c2 100644 --- a/tienda_ilusion/don_confiao/frontend/don-confiao/src/components/SummaryPurchase.vue +++ b/tienda_ilusion/don_confiao/frontend/don-confiao/src/components/SummaryPurchase.vue @@ -47,6 +47,8 @@ diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/services/api.js b/tienda_ilusion/don_confiao/frontend/don-confiao/src/services/api.js index 5e08f42..051535a 100644 --- a/tienda_ilusion/don_confiao/frontend/don-confiao/src/services/api.js +++ b/tienda_ilusion/don_confiao/frontend/don-confiao/src/services/api.js @@ -26,6 +26,10 @@ class Api { createPurchase(purchase) { return this.apiImplementation.createPurchase(purchase); } + + createReconciliationJar(reconciliation) { + return this.apiImplementation.createReconciliationJar(reconciliation); + } } export default Api; diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/services/django-api.js b/tienda_ilusion/don_confiao/frontend/don-confiao/src/services/django-api.js index 3c75f29..f2eed31 100644 --- a/tienda_ilusion/don_confiao/frontend/don-confiao/src/services/django-api.js +++ b/tienda_ilusion/don_confiao/frontend/don-confiao/src/services/django-api.js @@ -25,28 +25,13 @@ class DjangoApi { } createPurchase(purchase) { - return new Promise((resolve, reject) => { - console.log('compra a enviar:', purchase); - fetch('/don_confiao/api/sales/', { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify(purchase), - }).then(response => { - if (!response.ok) { - reject(new Error(`Error ${response.status}: ${response.statusText}`)); - } else { - response.json().then(data => { - if (!data) { - reject(new Error('La respuesta no es un JSON válido')); - } else { - resolve(data); - } - }); - } - }).catch(error => reject(error)); - }); + const url = '/don_confiao/api/sales/'; + return this.postRequest(url, purchase); + } + + createReconciliationJar(reconciliation) { + const url = '/don_confiao/reconciliate_jar'; + return this.postRequest(url, reconciliation); } getRequest(url) { @@ -60,7 +45,35 @@ class DjangoApi { reject(error); }); }); + + + } + + postRequest(url, content) { + return new Promise((resolve, reject) => { + fetch(url, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify(content) + }) + .then(response => { + if (!response.ok) { + reject(new Error(`Error ${response.status}: ${response.statusText}`)); + } else { + response.json().then(data => { + if (!data) { + reject(new Error('La respuesta no es un JSON válido')); + } else { + resolve(data); + } + }); + } + }) + .catch(error => reject(error)); + }); } } -export default DjangoApi; + export default DjangoApi; From 871a82eee5391e95dd3770b363410f1459f65da1 Mon Sep 17 00:00:00 2001 From: Mono Mono Date: Sat, 11 Jan 2025 15:44:07 -0500 Subject: [PATCH 7/7] #84 refactor(front): moved to api createCustomer. --- .../src/components/CreateCustomerModal.vue | 27 ++++++------------- .../frontend/don-confiao/src/services/api.js | 4 +++ .../don-confiao/src/services/django-api.js | 7 +++-- 3 files changed, 17 insertions(+), 21 deletions(-) diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/components/CreateCustomerModal.vue b/tienda_ilusion/don_confiao/frontend/don-confiao/src/components/CreateCustomerModal.vue index c3eb3b2..219270c 100644 --- a/tienda_ilusion/don_confiao/frontend/don-confiao/src/components/CreateCustomerModal.vue +++ b/tienda_ilusion/don_confiao/frontend/don-confiao/src/components/CreateCustomerModal.vue @@ -45,6 +45,7 @@ data() { return { showModal: false, + api: inject('api'), valid: false, customer: { name: '', @@ -72,25 +73,13 @@ async submitForm() { console.log(this.customer) if (this.$refs.form.validate()) { - try { - const response = await fetch('/don_confiao/api/customers/', { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify(this.customer), - }); - if (response.ok) { - const data = await response.json(); - console.log('Cliente Guardado:', data); - this.$emit('customerCreated', data); - this.closeModal(); - } else { - console.error('Error al Crear el Cliente:', response.statusText); - } - } catch (error) { - console.error('Error de red:', error); - } + this.api.createCustomer(this.customer) + .then(data => { + console.log('Cliente Guardado:', data); + this.$emit('customerCreated', data); + this.closeModal(); + }) + .catch(error => console.error('Error:', error)); } }, resetForm() { diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/services/api.js b/tienda_ilusion/don_confiao/frontend/don-confiao/src/services/api.js index 051535a..4f58d7a 100644 --- a/tienda_ilusion/don_confiao/frontend/don-confiao/src/services/api.js +++ b/tienda_ilusion/don_confiao/frontend/don-confiao/src/services/api.js @@ -30,6 +30,10 @@ class Api { createReconciliationJar(reconciliation) { return this.apiImplementation.createReconciliationJar(reconciliation); } + + createCustomer(customer) { + return this.apiImplementation.createCustomer(customer); + } } export default Api; diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/services/django-api.js b/tienda_ilusion/don_confiao/frontend/don-confiao/src/services/django-api.js index f2eed31..472af2f 100644 --- a/tienda_ilusion/don_confiao/frontend/don-confiao/src/services/django-api.js +++ b/tienda_ilusion/don_confiao/frontend/don-confiao/src/services/django-api.js @@ -34,6 +34,11 @@ class DjangoApi { return this.postRequest(url, reconciliation); } + createCustomer(customer) { + const url = '/don_confiao/api/customers/'; + return this.postRequest(url, customer); + } + getRequest(url) { return new Promise ((resolve, reject) => { fetch(url) @@ -45,8 +50,6 @@ class DjangoApi { reject(error); }); }); - - } postRequest(url, content) {