# 🔍 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/new` existe - ✅ Fonction `handleSubmit` bien configurée - ✅ FormData correctement construit avec tous les champs - ✅ Documents ajoutés avec le nom 'documents' (pluriel) - ✅ Appel API via `createCsvBooking()` qui utilise `upload()` - ✅ 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**: 1. Ouvrir les DevTools du navigateur (F12) 2. Aller dans l'onglet Console 3. Cliquer sur "Envoyer la demande" 4. Regarder les erreurs affichées **Erreurs Possibles**: - `Failed to fetch` → Problème de connexion au backend - `401 Unauthorized` → Token JWT expiré - `400 Bad Request` → Données invalides - `500 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**: ```bash # 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 JWT - **`Organization 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**: 1. Ouvrir DevTools → Network tab 2. Créer un booking 3. Regarder la requête POST vers `/api/v1/csv-bookings` 4. 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 1. **Ouvrir un terminal et monitorer les logs**: ```bash tail -f /tmp/backend-startup.log | grep -i "csv\|booking\|error" ``` 2. **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" 3. **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 ... ``` 4. **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 1. **Ouvrir DevTools** (F12) 2. **Aller dans Console** 3. **Créer un booking** 4. **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 1. **Ouvrir DevTools** (F12) 2. **Aller dans Network** 3. **Créer un booking** 4. **Trouver la requête** `POST /api/v1/csv-bookings` 5. **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**: 1. Se déconnecter 2. Se reconnecter 3. Réessayer --- ### Erreur: "Organization ID is required" **Cause**: L'utilisateur n'a pas d'organizationId **Solution**: 1. Vérifier dans la base de données que l'utilisateur a bien un `organizationId` 2. Si non, assigner une organization à l'utilisateur --- ### Erreur: S3/MinIO Upload Failed **Cause**: Impossible d'uploader vers MinIO **Solution**: ```bash # 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 ```bash # 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 1. **Effectuer les tests** ci-dessus dans l'ordre 2. **Noter l'erreur exacte** qui apparaît (console, network, logs) 3. **Appliquer la solution** correspondante 4. **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