mirror of
https://github.com/R0m1k3/LogiFlow.git
synced 2026-10-22 14:38:19 +02:00
Merge pull request #99 from R0m1k3/1.1
Reduce production latency by conditionally logging API requests and r…
This commit is contained in:
6 files changed
+57
-26
No files matched your search
Binary file not shown.
|
After Width: | Height: | Size: 166 KiB |
@@ -13,7 +13,10 @@ export async function apiRequest(
|
|||||||
body?: unknown,
|
body?: unknown,
|
||||||
headers: Record<string, string> = {}
|
headers: Record<string, string> = {}
|
||||||
): Promise<any> {
|
): Promise<any> {
|
||||||
console.log("🌐 API Request:", { url, method, body });
|
// Logging désactivé en production pour éviter la latence
|
||||||
|
if (import.meta.env.DEV) {
|
||||||
|
console.log("🌐 API Request:", { url, method });
|
||||||
|
}
|
||||||
|
|
||||||
const res = await fetch(url, {
|
const res = await fetch(url, {
|
||||||
method,
|
method,
|
||||||
@@ -25,7 +28,10 @@ export async function apiRequest(
|
|||||||
credentials: "include",
|
credentials: "include",
|
||||||
});
|
});
|
||||||
|
|
||||||
console.log("🌐 API Response:", { status: res.status, ok: res.ok });
|
// Logging des erreurs uniquement en production
|
||||||
|
if (!res.ok || import.meta.env.DEV) {
|
||||||
|
console.log("🌐 API Response:", { status: res.status, ok: res.ok, url });
|
||||||
|
}
|
||||||
|
|
||||||
await throwIfResNotOk(res);
|
await throwIfResNotOk(res);
|
||||||
|
|
||||||
|
|||||||
@@ -206,10 +206,10 @@ export default function BLReconciliation() {
|
|||||||
|
|
||||||
const deliveries = await response.json();
|
const deliveries = await response.json();
|
||||||
|
|
||||||
// Debug : examiner les données des groupes en production
|
// Debug désactivé en production pour éviter latence
|
||||||
console.log('🔍 DEBUG Production - Première livraison:', deliveries[0]);
|
if (import.meta.env.DEV && deliveries[0]) {
|
||||||
console.log('🔍 DEBUG Production - Groupe de la première livraison:', deliveries[0]?.group);
|
console.log('🔍 DEBUG - Première livraison:', deliveries[0]);
|
||||||
console.log('🔍 DEBUG Production - Champs disponibles dans group:', deliveries[0]?.group ? Object.keys(deliveries[0].group) : 'Pas de groupe');
|
}
|
||||||
const filtered = Array.isArray(deliveries) ? deliveries.filter((d: any) => d.status === 'delivered') : [];
|
const filtered = Array.isArray(deliveries) ? deliveries.filter((d: any) => d.status === 'delivered') : [];
|
||||||
|
|
||||||
return filtered.sort((a: any, b: any) => new Date(b.deliveredDate || b.updatedAt).getTime() - new Date(a.deliveredDate || a.updatedAt).getTime());
|
return filtered.sort((a: any, b: any) => new Date(b.deliveredDate || b.updatedAt).getTime() - new Date(a.deliveredDate || a.updatedAt).getTime());
|
||||||
@@ -222,12 +222,16 @@ export default function BLReconciliation() {
|
|||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!deliveriesWithBL.length || !suppliers.length) return;
|
if (!deliveriesWithBL.length || !suppliers.length) return;
|
||||||
|
|
||||||
console.log('🔄 Déclenchement vérifications automatiques...');
|
if (import.meta.env.DEV) {
|
||||||
|
console.log('🔄 Déclenchement vérifications automatiques...');
|
||||||
|
}
|
||||||
|
|
||||||
deliveriesWithBL.forEach((delivery: any) => {
|
deliveriesWithBL.forEach((delivery: any) => {
|
||||||
// Vérifier seulement si on a une référence de facture et pas déjà de résultat
|
// Vérifier seulement si on a une référence de facture et pas déjà de résultat
|
||||||
if (delivery.invoiceReference && !verificationResults[delivery.id] && !verifyingDeliveries.has(delivery.id)) {
|
if (delivery.invoiceReference && !verificationResults[delivery.id] && !verifyingDeliveries.has(delivery.id)) {
|
||||||
console.log(`🔍 Vérification auto pour livraison ${delivery.id}:`, delivery.invoiceReference);
|
if (import.meta.env.DEV) {
|
||||||
|
console.log(`🔍 Vérification auto pour livraison ${delivery.id}:`, delivery.invoiceReference);
|
||||||
|
}
|
||||||
|
|
||||||
// Délai pour éviter de surcharger le serveur - le cache évitera les appels inutiles
|
// Délai pour éviter de surcharger le serveur - le cache évitera les appels inutiles
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
@@ -373,14 +377,12 @@ export default function BLReconciliation() {
|
|||||||
// Et il faut qu'il y ait un magasin assigné avec un webhook
|
// Et il faut qu'il y ait un magasin assigné avec un webhook
|
||||||
const hasValidGroup = delivery.group && delivery.group.webhookUrl;
|
const hasValidGroup = delivery.group && delivery.group.webhookUrl;
|
||||||
|
|
||||||
// Debug temporaire pour diagnostiquer le problème
|
// Debug uniquement en développement
|
||||||
if (delivery && delivery.supplier?.name) {
|
if (import.meta.env.DEV && delivery && delivery.supplier?.name) {
|
||||||
console.log(`🔍 Debug bouton facture pour ${delivery.supplier.name}:`, {
|
console.log(`🔍 Debug bouton facture pour ${delivery.supplier.name}:`, {
|
||||||
isNotValidated,
|
isNotValidated,
|
||||||
hasNoInvoiceReference,
|
hasNoInvoiceReference,
|
||||||
hasValidGroup,
|
hasValidGroup,
|
||||||
group: delivery.group,
|
|
||||||
webhookUrl: delivery.group?.webhookUrl,
|
|
||||||
shouldShow: (isNotValidated || hasNoInvoiceReference) && hasValidGroup
|
shouldShow: (isNotValidated || hasNoInvoiceReference) && hasValidGroup
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -73,21 +73,25 @@ export default function DlcPage() {
|
|||||||
if (statusFilter && statusFilter !== "all") params.append("status", statusFilter);
|
if (statusFilter && statusFilter !== "all") params.append("status", statusFilter);
|
||||||
if (supplierFilter && supplierFilter !== "all") params.append("supplierId", supplierFilter);
|
if (supplierFilter && supplierFilter !== "all") params.append("supplierId", supplierFilter);
|
||||||
|
|
||||||
console.log("🔍 Requête DLC products:", {
|
if (import.meta.env.DEV) {
|
||||||
url: `/api/dlc-products?${params.toString()}`,
|
console.log("🔍 Requête DLC products:", {
|
||||||
user: user?.role,
|
url: `/api/dlc-products?${params.toString()}`,
|
||||||
selectedStoreId,
|
user: user?.role,
|
||||||
userGroups: user?.userGroups?.map(ug => ({ groupId: ug.groupId, groupName: ug.group?.name }))
|
selectedStoreId,
|
||||||
});
|
userGroups: user?.userGroups?.map(ug => ({ groupId: ug.groupId, groupName: ug.group?.name }))
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
return apiRequest(`/api/dlc-products?${params.toString()}`);
|
return apiRequest(`/api/dlc-products?${params.toString()}`);
|
||||||
},
|
},
|
||||||
enabled: !authLoading,
|
enabled: !authLoading,
|
||||||
onSuccess: (data) => {
|
onSuccess: (data) => {
|
||||||
console.log("📋 DLC products reçus:", {
|
if (import.meta.env.DEV) {
|
||||||
total: data.length,
|
console.log("📋 DLC products reçus:", {
|
||||||
sample: data.slice(0, 3).map(d => ({ id: d.id, productName: d.productName, groupId: d.groupId }))
|
total: data.length,
|
||||||
});
|
sample: data.slice(0, 3).map(d => ({ id: d.id, productName: d.productName, groupId: d.groupId }))
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -121,7 +125,9 @@ export default function DlcPage() {
|
|||||||
// Invalidate all DLC queries with any combination of parameters
|
// Invalidate all DLC queries with any combination of parameters
|
||||||
queryClient.invalidateQueries({ queryKey: ["/api/dlc-products"], exact: false });
|
queryClient.invalidateQueries({ queryKey: ["/api/dlc-products"], exact: false });
|
||||||
queryClient.invalidateQueries({ queryKey: ["/api/dlc-products/stats"], exact: false });
|
queryClient.invalidateQueries({ queryKey: ["/api/dlc-products/stats"], exact: false });
|
||||||
console.log("🔄 Cache DLC invalidé après création");
|
if (import.meta.env.DEV) {
|
||||||
|
console.log("🔄 Cache DLC invalidé après création");
|
||||||
|
}
|
||||||
toast({ title: "Produit DLC créé avec succès" });
|
toast({ title: "Produit DLC créé avec succès" });
|
||||||
setIsDialogOpen(false);
|
setIsDialogOpen(false);
|
||||||
form.reset();
|
form.reset();
|
||||||
@@ -143,7 +149,9 @@ export default function DlcPage() {
|
|||||||
onSuccess: () => {
|
onSuccess: () => {
|
||||||
queryClient.invalidateQueries({ queryKey: ["/api/dlc-products"], exact: false });
|
queryClient.invalidateQueries({ queryKey: ["/api/dlc-products"], exact: false });
|
||||||
queryClient.invalidateQueries({ queryKey: ["/api/dlc-products/stats"], exact: false });
|
queryClient.invalidateQueries({ queryKey: ["/api/dlc-products/stats"], exact: false });
|
||||||
console.log("🔄 Cache DLC invalidé après mise à jour");
|
if (import.meta.env.DEV) {
|
||||||
|
console.log("🔄 Cache DLC invalidé après mise à jour");
|
||||||
|
}
|
||||||
toast({ title: "Produit DLC mis à jour avec succès" });
|
toast({ title: "Produit DLC mis à jour avec succès" });
|
||||||
setIsDialogOpen(false);
|
setIsDialogOpen(false);
|
||||||
form.reset();
|
form.reset();
|
||||||
@@ -164,7 +172,9 @@ export default function DlcPage() {
|
|||||||
onSuccess: () => {
|
onSuccess: () => {
|
||||||
queryClient.invalidateQueries({ queryKey: ["/api/dlc-products"], exact: false });
|
queryClient.invalidateQueries({ queryKey: ["/api/dlc-products"], exact: false });
|
||||||
queryClient.invalidateQueries({ queryKey: ["/api/dlc-products/stats"], exact: false });
|
queryClient.invalidateQueries({ queryKey: ["/api/dlc-products/stats"], exact: false });
|
||||||
console.log("🔄 Cache DLC invalidé après validation");
|
if (import.meta.env.DEV) {
|
||||||
|
console.log("🔄 Cache DLC invalidé après validation");
|
||||||
|
}
|
||||||
toast({ title: "Produit validé avec succès" });
|
toast({ title: "Produit validé avec succès" });
|
||||||
},
|
},
|
||||||
onError: (error: any) => {
|
onError: (error: any) => {
|
||||||
|
|||||||
+1
-1
@@ -2,4 +2,4 @@
|
|||||||
# https://curl.se/docs/http-cookies.html
|
# https://curl.se/docs/http-cookies.html
|
||||||
# This file was generated by libcurl! Edit at your own risk.
|
# This file was generated by libcurl! Edit at your own risk.
|
||||||
|
|
||||||
#HttpOnly_localhost FALSE / FALSE 1755183951 connect.sid s%3A5AoIK-t2wOxXHZXR8IfvVc8xyfwMVSB8.wszhmo%2FyUviNdYS5uw4KwFZ7AoexEQiDD3olvfqQfHM
|
#HttpOnly_localhost FALSE / FALSE 1755187696 connect.sid s%3AnEg7s3fD2sLyetJTCx-VYkzZFbBkPEcf.2BsOBC1UlFIC%2BpyKgdtocMX42YO%2FZLBn1cU6UeEnIYY
|
||||||
@@ -19,6 +19,19 @@ La plateforme fournit une gestion robuste des flux de travail de livraison avec
|
|||||||
|
|
||||||
## Recent Changes
|
## Recent Changes
|
||||||
|
|
||||||
|
### 2025-08-13 - Optimisation performance production + suppression fonctionnelle
|
||||||
|
✅ **Résolution latence production** :
|
||||||
|
- **Problème** : Console saturée par centaines de logs "API Response" causant latence
|
||||||
|
- **Solution** : Logging conditionnel - seulement en développement pour requêtes normales
|
||||||
|
- **Production** : Seules les erreurs API sont loggées pour debugging
|
||||||
|
- **Impact** : Réduction drastique de la charge console et amélioration performances
|
||||||
|
|
||||||
|
✅ **Fonctionnalité suppression complètement opérationnelle** :
|
||||||
|
- **Cache NocoDB** : Fonction `saveInvoiceVerificationCache` ajoutée aux deux systèmes stockage
|
||||||
|
- **MemStorage** : Implémentation CRUD complète pour ordres et livraisons
|
||||||
|
- **Test validé** : Création, lecture et suppression fonctionnent parfaitement
|
||||||
|
- **Production** : Les suppressions de livraisons et rapprochements sont maintenant possibles
|
||||||
|
|
||||||
### 2025-08-13 - Problème authentification production résolu
|
### 2025-08-13 - Problème authentification production résolu
|
||||||
✅ **Diagnostic et solution du problème de validation des livraisons** :
|
✅ **Diagnostic et solution du problème de validation des livraisons** :
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user