Merge pull request #99 from R0m1k3/1.1

Reduce production latency by conditionally logging API requests and r…
This commit is contained in:
LogiFlow authored and GitHub committed 2025-08-13 22:16:53 +02:00
commit 079eade538
6 files changed
+57 -26

No files matched your search

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

+8 -2
View File
@@ -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);
+12 -10
View File
@@ -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
}); });
} }
+23 -13
View File
@@ -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
View File
@@ -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
+13
View File
@@ -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** :