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,
headers: Record<string, string> = {}
): 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, {
method,
@@ -25,7 +28,10 @@ export async function apiRequest(
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);
+12 -10
View File
@@ -206,10 +206,10 @@ export default function BLReconciliation() {
const deliveries = await response.json();
// Debug : examiner les données des groupes en production
console.log('🔍 DEBUG Production - Première livraison:', deliveries[0]);
console.log('🔍 DEBUG Production - Groupe de la première livraison:', deliveries[0]?.group);
console.log('🔍 DEBUG Production - Champs disponibles dans group:', deliveries[0]?.group ? Object.keys(deliveries[0].group) : 'Pas de groupe');
// Debug désactivé en production pour éviter latence
if (import.meta.env.DEV && deliveries[0]) {
console.log('🔍 DEBUG - Première livraison:', deliveries[0]);
}
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());
@@ -222,12 +222,16 @@ export default function BLReconciliation() {
useEffect(() => {
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) => {
// 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)) {
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
setTimeout(() => {
@@ -373,14 +377,12 @@ export default function BLReconciliation() {
// Et il faut qu'il y ait un magasin assigné avec un webhook
const hasValidGroup = delivery.group && delivery.group.webhookUrl;
// Debug temporaire pour diagnostiquer le problème
if (delivery && delivery.supplier?.name) {
// Debug uniquement en développement
if (import.meta.env.DEV && delivery && delivery.supplier?.name) {
console.log(`🔍 Debug bouton facture pour ${delivery.supplier.name}:`, {
isNotValidated,
hasNoInvoiceReference,
hasValidGroup,
group: delivery.group,
webhookUrl: delivery.group?.webhookUrl,
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 (supplierFilter && supplierFilter !== "all") params.append("supplierId", supplierFilter);
console.log("🔍 Requête DLC products:", {
url: `/api/dlc-products?${params.toString()}`,
user: user?.role,
selectedStoreId,
userGroups: user?.userGroups?.map(ug => ({ groupId: ug.groupId, groupName: ug.group?.name }))
});
if (import.meta.env.DEV) {
console.log("🔍 Requête DLC products:", {
url: `/api/dlc-products?${params.toString()}`,
user: user?.role,
selectedStoreId,
userGroups: user?.userGroups?.map(ug => ({ groupId: ug.groupId, groupName: ug.group?.name }))
});
}
return apiRequest(`/api/dlc-products?${params.toString()}`);
},
enabled: !authLoading,
onSuccess: (data) => {
console.log("📋 DLC products reçus:", {
total: data.length,
sample: data.slice(0, 3).map(d => ({ id: d.id, productName: d.productName, groupId: d.groupId }))
});
if (import.meta.env.DEV) {
console.log("📋 DLC products reçus:", {
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
queryClient.invalidateQueries({ queryKey: ["/api/dlc-products"], 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" });
setIsDialogOpen(false);
form.reset();
@@ -143,7 +149,9 @@ export default function DlcPage() {
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ["/api/dlc-products"], 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" });
setIsDialogOpen(false);
form.reset();
@@ -164,7 +172,9 @@ export default function DlcPage() {
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ["/api/dlc-products"], 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" });
},
onError: (error: any) => {
+1 -1
View File
@@ -2,4 +2,4 @@
# https://curl.se/docs/http-cookies.html
# 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
### 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
✅ **Diagnostic et solution du problème de validation des livraisons** :