283 lines
8.2 KiB
Markdown
283 lines
8.2 KiB
Markdown
# 🔍 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
|