From 8eb0458ce2800ac5e4361cf7e3517290dc47b04c Mon Sep 17 00:00:00 2001 From: michaelschal <35957947-michaelschal@users.noreply.replit.com> Date: Fri, 15 Aug 2025 11:13:31 +0000 Subject: [PATCH 1/2] Improve invoice verification stability and error handling Enhance InvoiceVerificationService to cache API errors and "not found" results, preventing repetitive calls. Add validation for NocoDB search parameters and improve error logging for production stability. Replit-Commit-Author: Agent Replit-Commit-Session-Id: d43bd811-9372-45a7-8ac9-4a954c0538e1 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/1957c339-2757-4d1f-8e92-e9f71a1ce58e/d43bd811-9372-45a7-8ac9-4a954c0538e1/IhbIRSa --- attached_assets/image_1755256207040.png | Bin 0 -> 112472 bytes replit.md | 2 +- server/invoiceVerification.ts | 169 +++++++++++++++++++----- 3 files changed, 134 insertions(+), 37 deletions(-) create mode 100644 attached_assets/image_1755256207040.png diff --git a/attached_assets/image_1755256207040.png b/attached_assets/image_1755256207040.png new file mode 100644 index 0000000000000000000000000000000000000000..c9b40d40bcfdfb022826111a1bc4f7bc3dd98e61 GIT binary patch literal 112472 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 { + ): Promise<{ found: boolean; data?: any; error?: string }> { try { + // Protection contre les appels avec des paramètres invalides + if (!searchValue || !columnName || !config || !tableId) { + return { found: false, error: 'Paramètres invalides' }; + } + // Utiliser directement l'ID de table fourni const searchUrl = `${config.baseUrl}/api/v1/db/data/v1/${config.projectId}/${tableId}`; - console.log('🔍 Recherche NocoDB:', { - url: searchUrl, - tableId: tableId, - column: columnName, - value: searchValue - }); + // Log condensé en production pour éviter le spam + if (process.env.NODE_ENV === 'production') { + console.log('🔍 Recherche NocoDB:', { tableId, column: columnName }); + } else { + console.log('🔍 Recherche NocoDB:', { + url: searchUrl, + tableId: tableId, + column: columnName, + value: searchValue + }); + } - const response = await fetch(`${searchUrl}?where=(${columnName},eq,${encodeURIComponent(searchValue)})`, { - method: 'GET', - headers: { - 'Content-Type': 'application/json', - 'xc-token': config.apiToken + // Créer un AbortController pour le timeout + const controller = new AbortController(); + const timeoutId = setTimeout(() => controller.abort(), 10000); // 10 secondes timeout + + try { + const response = await fetch(`${searchUrl}?where=(${columnName},eq,${encodeURIComponent(searchValue)})`, { + method: 'GET', + headers: { + 'Content-Type': 'application/json', + 'xc-token': config.apiToken + }, + signal: controller.signal + }); + + clearTimeout(timeoutId); + + if (!response.ok) { + const errorMsg = `HTTP ${response.status}: ${response.statusText}`; + console.error('❌ Erreur réponse NocoDB:', errorMsg); + return { found: false, error: errorMsg }; + } + + const result = await response.json(); + + // Log condensé en production + if (process.env.NODE_ENV !== 'production') { + console.log('✅ Réponse NocoDB:', result); + } + + if (result.list && result.list.length > 0) { + return { + found: true, + data: result.list[0] + }; } - }); - if (!response.ok) { - console.error('❌ Erreur réponse NocoDB:', response.status, response.statusText); return { found: false }; + + } catch (fetchError: any) { + clearTimeout(timeoutId); + + // Gestion spécifique des erreurs réseau + if (fetchError.name === 'AbortError') { + const timeoutMsg = 'Timeout - API NocoDB non accessible'; + console.error('⏱️ Timeout NocoDB:', timeoutMsg); + return { found: false, error: timeoutMsg }; + } + + if (fetchError.code === 'ERR_CERT_VERIFIER_CHANGED' || fetchError.message?.includes('certificate')) { + const certMsg = 'Erreur certificat SSL - Vérifiez la configuration NocoDB'; + console.error('🔒 Erreur certificat NocoDB:', certMsg); + return { found: false, error: certMsg }; + } + + if (fetchError.code === 'ENOTFOUND' || fetchError.code === 'ECONNREFUSED') { + const connMsg = 'NocoDB non accessible - Vérifiez la connectivité réseau'; + console.error('🌐 Erreur connexion NocoDB:', connMsg); + return { found: false, error: connMsg }; + } + + throw fetchError; // Relancer les autres erreurs } - const result = await response.json(); - console.log('✅ Réponse NocoDB:', result); - - if (result.list && result.list.length > 0) { - return { - found: true, - data: result.list[0] - }; + } catch (error: any) { + // Log d'erreur condensé en production + const errorMsg = error?.message || 'Erreur inconnue'; + if (process.env.NODE_ENV === 'production') { + console.error('❌ Erreur NocoDB:', errorMsg); + } else { + console.error('❌ Erreur appel NocoDB:', error); } - - return { found: false }; - - } catch (error) { - console.error('❌ Erreur appel NocoDB:', error); - return { found: false }; + + return { found: false, error: errorMsg }; } } From c65860cb853a50a7bc106d559e46d7280c27c023 Mon Sep 17 00:00:00 2001 From: michaelschal <35957947-michaelschal@users.noreply.replit.com> Date: Fri, 15 Aug 2025 11:20:09 +0000 Subject: [PATCH 2/2] Add ability to detect user's city using geolocation Implement geolocation functionality in the weather widget to automatically detect and set the user's city based on GPS coordinates, updating weather data accordingly. Replit-Commit-Author: Agent Replit-Commit-Session-Id: d43bd811-9372-45a7-8ac9-4a954c0538e1 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/1957c339-2757-4d1f-8e92-e9f71a1ce58e/d43bd811-9372-45a7-8ac9-4a954c0538e1/zoZabWF --- client/src/components/WeatherWidget.tsx | 112 ++++++++++++++++++++++-- replit.md | 2 +- server/routes.ts | 54 ++++++++++++ server/weatherService.ts | 40 +++++++++ 4 files changed, 202 insertions(+), 6 deletions(-) diff --git a/client/src/components/WeatherWidget.tsx b/client/src/components/WeatherWidget.tsx index f356b7d..60288d4 100644 --- a/client/src/components/WeatherWidget.tsx +++ b/client/src/components/WeatherWidget.tsx @@ -1,6 +1,9 @@ -import { useQuery } from "@tanstack/react-query"; -import { Cloud, CloudRain, Sun, CloudSnow, CloudSun, ThermometerSun, CloudDrizzle, Wind, Zap, Eye } from "lucide-react"; +import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; +import { Cloud, CloudRain, Sun, CloudSnow, CloudSun, ThermometerSun, CloudDrizzle, Wind, Zap, Eye, MapPin, Loader2 } from "lucide-react"; import { Card, CardContent } from "@/components/ui/card"; +import { Button } from "@/components/ui/button"; +import { useToast } from "@/hooks/use-toast"; +import { apiRequest } from "@/lib/queryClient"; interface WeatherData { id: number; @@ -118,12 +121,95 @@ const WeatherIcon = ({ condition, size = 20 }: { condition: string; size?: numbe }; export default function WeatherWidget() { + const { toast } = useToast(); + const queryClient = useQueryClient(); + const { data: weather, isLoading, error } = useQuery({ queryKey: ['/api/weather/current'], refetchInterval: 30 * 60 * 1000, // Refetch every 30 minutes retry: 1, }); + // Mutation pour la géolocalisation + const geoLocationMutation = useMutation({ + mutationFn: async (coordinates: { latitude: number; longitude: number }) => { + const response = await fetch('/api/weather/geolocation', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify(coordinates), + }); + + if (!response.ok) { + const error = await response.json(); + throw new Error(error.message || 'Erreur de géolocalisation'); + } + + return response.json(); + }, + onSuccess: (data) => { + toast({ + title: "Localisation mise à jour", + description: data.message, + }); + + // Actualiser les données météo + queryClient.invalidateQueries({ queryKey: ['/api/weather/current'] }); + }, + onError: (error: any) => { + toast({ + title: "Erreur de géolocalisation", + description: error.message || "Impossible de déterminer votre localisation", + variant: "destructive", + }); + }, + }); + + // Fonction pour obtenir la géolocalisation + const handleGeolocation = () => { + if (!navigator.geolocation) { + toast({ + title: "Géolocalisation non supportée", + description: "Votre navigateur ne supporte pas la géolocalisation", + variant: "destructive", + }); + return; + } + + navigator.geolocation.getCurrentPosition( + (position) => { + const { latitude, longitude } = position.coords; + geoLocationMutation.mutate({ latitude, longitude }); + }, + (error) => { + let message = "Erreur de géolocalisation"; + switch (error.code) { + case error.PERMISSION_DENIED: + message = "Autorisation de géolocalisation refusée"; + break; + case error.POSITION_UNAVAILABLE: + message = "Position non disponible"; + break; + case error.TIMEOUT: + message = "Délai d'attente dépassé"; + break; + } + + toast({ + title: "Erreur de géolocalisation", + description: message, + variant: "destructive", + }); + }, + { + enableHighAccuracy: true, + timeout: 10000, + maximumAge: 300000, // 5 minutes + } + ); + }; + if (isLoading) { return ( @@ -160,9 +246,25 @@ export default function WeatherWidget() {
- - {location.split(',')[0]} - +
+ + {location.split(',')[0]} + + +
{translateToFrench(weather.currentYear?.condition || 'Inconnu')} diff --git a/replit.md b/replit.md index aedf062..31c52cf 100644 --- a/replit.md +++ b/replit.md @@ -29,7 +29,7 @@ The platform is built with a clear separation of concerns, utilizing a modern fu - **Data Synchronization:** Logic is implemented to ensure data consistency between development (in-memory storage) and production (PostgreSQL) environments, particularly for order status and relationships. **Feature Specifications:** -- **Weather Integration:** A comprehensive, modern weather interface displays detailed weather conditions sourced directly from the Visual Crossing API with French language support. Features intelligent date comparison using the same day of the week from the previous year for more relevant weather pattern analysis (e.g., Friday August 15, 2025 vs Friday August 16, 2024). +- **Weather Integration:** A comprehensive, modern weather interface displays detailed weather conditions sourced directly from the Visual Crossing API with French language support. Features intelligent date comparison using the same day of the week from the previous year for more relevant weather pattern analysis (e.g., Friday August 15, 2025 vs Friday August 16, 2024). Enhanced with automatic geolocation detection allowing users to click a button to auto-detect their city using GPS coordinates and Visual Crossing reverse geocoding API (August 2025). - **Order and Delivery Management:** Full CRUD operations for orders and deliveries, including linking orders to deliveries and managing their statuses. - **Reconciliation:** Functionality for reconciling Bills of Lading (BL) and invoices with immediate UI updates. - **Invoice Verification Cache:** Robust caching system for invoice verification results with automatic expiration and conflict resolution. Enhanced with unique constraint handling and graceful error management for production stability (August 2025). Fixed production SSL certificate errors and fetch timeout loops with enhanced error handling, network timeout protection, and error result caching to prevent infinite retry loops (August 2025). diff --git a/server/routes.ts b/server/routes.ts index 917e5ef..4e2958e 100644 --- a/server/routes.ts +++ b/server/routes.ts @@ -2934,6 +2934,60 @@ RÉSUMÉ DU SCAN } }); + // Route de géolocalisation météo + app.post('/api/weather/geolocation', isAuthenticated, async (req: any, res) => { + try { + const user = await storage.getUserWithGroups(req.user.claims ? req.user.claims.sub : req.user.id); + if (!user) { + return res.status(404).json({ message: "User not found" }); + } + + const { latitude, longitude } = req.body; + + if (!latitude || !longitude) { + return res.status(400).json({ message: "Latitude et longitude requises" }); + } + + // Récupérer les paramètres météo actuels pour obtenir la clé API + const settings = await storage.getWeatherSettings(); + if (!settings || !settings.apiKey) { + return res.status(500).json({ message: "Configuration météo manquante" }); + } + + // Convertir les coordonnées en nom de ville + const locationData = await weatherService.getCityFromCoordinates( + parseFloat(latitude), + parseFloat(longitude), + settings.apiKey + ); + + if (!locationData) { + return res.status(500).json({ message: "Impossible de déterminer la ville à partir des coordonnées" }); + } + + // Mettre à jour automatiquement la configuration météo avec la nouvelle localisation + await storage.updateWeatherSettings(settings.id, { + location: locationData.fullLocation + }); + + console.log('🌍 Localisation mise à jour automatiquement:', { + from: settings.location, + to: locationData.fullLocation, + coordinates: { latitude, longitude } + }); + + res.json({ + success: true, + location: locationData, + message: `Localisation mise à jour vers ${locationData.city}, ${locationData.country}` + }); + + } catch (error) { + console.error("Erreur géolocalisation météo:", error); + res.status(500).json({ message: "Erreur lors de la géolocalisation" }); + } + }); + // Create server instance const httpServer = createServer(app); diff --git a/server/weatherService.ts b/server/weatherService.ts index a692724..294b2ba 100644 --- a/server/weatherService.ts +++ b/server/weatherService.ts @@ -242,6 +242,46 @@ export class WeatherService { return { success: false, message: "Erreur de connexion à l'API météo" }; } } + + /** + * Convertit les coordonnées GPS en nom de ville via l'API Visual Crossing + */ + async getCityFromCoordinates(latitude: number, longitude: number, apiKey: string): Promise<{ city: string; country: string; fullLocation: string } | null> { + try { + const url = `${this.baseUrl}/${latitude},${longitude}?unitGroup=metric&include=current&key=${apiKey}&contentType=json`; + + console.log('🌍 Géolocalisation:', { latitude, longitude }); + + const response = await fetch(url); + if (!response.ok) { + console.error(`Geolocation API error: ${response.status} ${response.statusText}`); + return null; + } + + const data = await response.json(); + + // L'API Visual Crossing retourne les informations de localisation + if (data.resolvedAddress) { + const address = data.resolvedAddress; + const parts = address.split(',').map((part: string) => part.trim()); + + // Extraire la ville et le pays de l'adresse + const city = parts[0] || 'Ville inconnue'; + const country = parts[parts.length - 1] || 'Pays inconnu'; + + return { + city, + country, + fullLocation: address + }; + } + + return null; + } catch (error) { + console.error("Erreur lors de la géolocalisation:", error); + return null; + } + } } export const weatherService = new WeatherService(); \ No newline at end of file