8.2 KiB
🔍 Diagnostic Complet - Workflow CSV Booking
Date: 5 décembre 2025 Problème: Le workflow d'envoi de demande de booking ne fonctionne pas
✅ Vérifications Effectuées
1. Backend ✅
- ✅ Backend en cours d'exécution (port 4000)
- ✅ Configuration SMTP corrigée (variables ajoutées au schéma Joi)
- ✅ Email adapter initialisé correctement avec DNS bypass
- ✅ Module CsvBookingsModule importé dans app.module.ts
- ✅ Controller CsvBookingsController bien configuré
- ✅ Service CsvBookingService bien configuré
- ✅ MinIO container en cours d'exécution
- ✅ Bucket 'xpeditis-documents' existe dans MinIO
2. Frontend ✅
- ✅ Page
/dashboard/booking/newexiste - ✅ Fonction
handleSubmitbien configurée - ✅ FormData correctement construit avec tous les champs
- ✅ Documents ajoutés avec le nom 'documents' (pluriel)
- ✅ Appel API via
createCsvBooking()qui utiliseupload() - ✅ Gestion d'erreurs présente (affiche message si échec)
🔍 Points de Défaillance Possibles
Scénario 1: Erreur Frontend (Browser Console)
Symptômes: Le bouton "Envoyer la demande" ne fait rien, ou affiche un message d'erreur
Vérification:
- Ouvrir les DevTools du navigateur (F12)
- Aller dans l'onglet Console
- Cliquer sur "Envoyer la demande"
- Regarder les erreurs affichées
Erreurs Possibles:
Failed to fetch→ Problème de connexion au backend401 Unauthorized→ Token JWT expiré400 Bad Request→ Données invalides500 Internal Server Error→ Erreur backend (voir logs)
Scénario 2: Erreur Backend (Logs)
Symptômes: La requête arrive au backend mais échoue
Vérification:
# Voir les logs backend en temps réel
tail -f /tmp/backend-startup.log
# Puis créer un booking via le frontend
Erreurs Possibles:
- Pas de logs
=== CSV Booking Request Debug ===→ La requête n'arrive pas au controller At least one document is required→ Aucun fichier uploadéUser authentication failed→ Problème de JWTOrganization ID is required→ User sans organizationId- Erreur S3/MinIO → Upload de fichiers échoué
- Erreur Email → Envoi email échoué (ne devrait plus arriver après le fix)
Scénario 3: Validation Échouée
Symptômes: Erreur 400 Bad Request
Causes Possibles:
- Port codes invalides (origin/destination): Doivent être exactement 5 caractères (ex: NLRTM, USNYC)
- Email invalide (carrierEmail): Doit être un email valide
- Champs numériques (volumeCBM, weightKG, etc.): Doivent être > 0
- Currency invalide: Doit être 'USD' ou 'EUR'
- Pas de documents: Au moins 1 fichier requis
Scénario 4: CORS ou Network
Symptômes: Erreur CORS ou network error
Vérification:
- Ouvrir DevTools → Network tab
- Créer un booking
- Regarder la requête POST vers
/api/v1/csv-bookings - Vérifier:
- Status code (200/201 = OK, 4xx/5xx = erreur)
- Response body (message d'erreur)
- Request headers (Authorization token présent?)
Solutions:
- Backend et frontend doivent tourner simultanément
- Frontend:
http://localhost:3000 - Backend:
http://localhost:4000
🧪 Tests à Effectuer
Test 1: Vérifier que le Backend Reçoit la Requête
-
Ouvrir un terminal et monitorer les logs:
tail -f /tmp/backend-startup.log | grep -i "csv\|booking\|error" -
Dans le navigateur:
- Aller sur: http://localhost:3000/dashboard/booking/new?rateData=%7B%22companyName%22%3A%22Test%20Carrier%22%2C%22companyEmail%22%3A%22carrier%40test.com%22%2C%22origin%22%3A%22NLRTM%22%2C%22destination%22%3A%22USNYC%22%2C%22containerType%22%3A%22LCL%22%2C%22priceUSD%22%3A1000%2C%22priceEUR%22%3A900%2C%22primaryCurrency%22%3A%22USD%22%2C%22transitDays%22%3A22%7D&volumeCBM=2.88&weightKG=1500&palletCount=3
- Ajouter au moins 1 document
- Cliquer sur "Envoyer la demande"
-
Dans les logs, vous devriez voir:
=== CSV Booking Request Debug === req.user: { id: '...', organizationId: '...' } req.body: { carrierName: 'Test Carrier', ... } files: 1 ================================ Creating CSV booking for user ... Uploaded 1 documents for booking ... CSV booking created with ID: ... Email sent to carrier: carrier@test.com Notification created for user ... -
Si vous NE voyez PAS ces logs → La requête n'arrive pas au backend. Vérifier:
- Frontend connecté et JWT valide
- Backend en cours d'exécution
- Network tab du navigateur pour voir l'erreur exacte
Test 2: Vérifier le Browser Console
- Ouvrir DevTools (F12)
- Aller dans Console
- Créer un booking
- Regarder les erreurs:
- Si erreur affichée → noter le message exact
- Si aucune erreur → le problème est silencieux (voir Network tab)
Test 3: Vérifier Network Tab
- Ouvrir DevTools (F12)
- Aller dans Network
- Créer un booking
- Trouver la requête
POST /api/v1/csv-bookings - Vérifier:
- Status: Doit être 200 ou 201
- Request Payload: Tous les champs présents?
- Response: Message d'erreur?
🔧 Solutions par Erreur
Erreur: "At least one document is required"
Cause: Aucun fichier n'a été uploadé
Solution:
- Vérifier que vous avez bien sélectionné au moins 1 fichier
- Vérifier que le fichier est dans les formats acceptés (PDF, DOC, DOCX, JPG, PNG)
- Vérifier que le fichier fait moins de 5MB
Erreur: "User authentication failed"
Cause: Token JWT invalide ou expiré
Solution:
- Se déconnecter
- Se reconnecter
- Réessayer
Erreur: "Organization ID is required"
Cause: L'utilisateur n'a pas d'organizationId
Solution:
- Vérifier dans la base de données que l'utilisateur a bien un
organizationId - Si non, assigner une organization à l'utilisateur
Erreur: S3/MinIO Upload Failed
Cause: Impossible d'uploader vers MinIO
Solution:
# Vérifier que MinIO tourne
docker ps | grep minio
# Si non, le démarrer
docker-compose up -d
# Vérifier que le bucket existe
cd apps/backend
node setup-minio-bucket.js
Erreur: Email Failed (ne devrait plus arriver)
Cause: Envoi email échoué
Solution:
- Vérifier que les variables SMTP sont dans le schéma Joi (déjà corrigé ✅)
- Tester l'envoi d'email:
node test-smtp-simple.js
📊 Checklist de Diagnostic
Cocher au fur et à mesure:
- Backend en cours d'exécution (port 4000)
- Frontend en cours d'exécution (port 3000)
- MinIO en cours d'exécution (port 9000)
- Bucket 'xpeditis-documents' existe
- Variables SMTP configurées
- Email adapter initialisé (logs backend)
- Utilisateur connecté au frontend
- Token JWT valide (pas expiré)
- Browser console sans erreurs
- Network tab montre requête POST envoyée
- Logs backend montrent "CSV Booking Request Debug"
- Documents uploadés (au moins 1)
- Port codes valides (5 caractères exactement)
- Email transporteur valide
🚀 Commandes Utiles
# Redémarrer backend
cd apps/backend
npm run dev
# Vérifier logs backend
tail -f /tmp/backend-startup.log | grep -i "csv\|booking\|error"
# Tester email
cd apps/backend
node test-smtp-simple.js
# Vérifier MinIO
docker ps | grep minio
node setup-minio-bucket.js
# Voir tous les endpoints
curl http://localhost:4000/api/docs
📝 Prochaines Étapes
- Effectuer les tests ci-dessus dans l'ordre
- Noter l'erreur exacte qui apparaît (console, network, logs)
- Appliquer la solution correspondante
- Réessayer
Si après tous ces tests le problème persiste, partager:
- Le message d'erreur exact (browser console)
- Les logs backend au moment de l'erreur
- Le status code HTTP de la requête (network tab)
Dernière mise à jour: 5 décembre 2025 Statut:
- ✅ Email fix appliqué
- ✅ MinIO bucket vérifié
- ✅ Code analysé
- ⏳ En attente de tests utilisateur