xpeditis2.0/apps/backend/CSV_BOOKING_DIAGNOSTIC.md
2025-12-05 13:55:40 +01:00

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/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:

# 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:

    tail -f /tmp/backend-startup.log | grep -i "csv\|booking\|error"
    
  2. Dans le navigateur:

  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:

# 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

  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