La connexion entre le frontend et le backend a été complètement intégrée. Voici ce qui a été mis en place :
Routes disponibles :
- Auth :
/auth/sign-in,/auth/sign-up,/auth/me - Users :
/users,/users/me/profile,/users/me/password - Companies :
/companies(CRUD) - Documents :
/documents,/documents/me,/documents/upload
src/services/api.js- Service axios avec tous les endpoints APIsrc/context/AuthContext.jsx- Authentification avec API réellesrc/context/FournisseurContext.jsx- Gestion des fournisseurs via APIsrc/hooks/useDocuments.js- Upload et gestion des documentssrc/components/auth/LoginForm.jsx- Formulaire de connexion (async)src/components/auth/RegisterFournisseurForm.jsx- Inscription (async)src/components/upload/UploadZone.jsx- Upload de fichierssrc/pages/UploadPage.jsx- Page d'upload.env.example- Configuration de l'API
src/services/api.js- Service axios (nouveau fichier)src/context/AuthContext.jsx- Authentification avec API réellesrc/components/auth/LoginForm.jsx- Formulaire de connexion (async)src/components/auth/RegisterForm.jsx- Inscription (async).env.example- Configuration de l'API
cd backend
npm install
# Créer un fichier .env avec les variables du .env.example
# Important: JWT_SECRET doit être défini
npm run devPort : 3000
cd frontend/crm-fournisseur
npm install
# Créer un fichier .env:
echo "VITE_API_URL=http://localhost:3000" > .env
npm run devcd frontend/outil-conformite
npm install
# Créer un fichier .env:
echo "VITE_API_URL=http://localhost:3000" > .env
npm run dev- L'utilisateur rentre email/password dans le formulaire
POST /auth/sign-inest appelé viaauthAPI.signIn()- Token JWT retourné et stocké dans localStorage (
crm_userouconformite_user) - Token ajouté automatiquement à tous les appels API via
api.interceptors.request
- L'utilisateur remplit le formulaire d'inscription
POST /auth/sign-upest appelé avec les données- Un compte utilisateur est créé
- Pour le CRM : Une fiche fournisseur (company) est créée automatiquement
- Token supprimé de localStorage
- Utilisateur redirigé vers
/login
POST /auth/sign-in
Body: { email, password }
Response: { user, token }
POST /auth/sign-up
Body: { name, email, password, role }
Response: { user, token }
GET /auth/me
Response: { user }GET /companies - Liste tous les fournisseurs
GET /companies/:id - Détail d'un fournisseur
POST /companies - Crée un fournisseur
PUT /companies/:id - Met à jourGET /documents/me - Mes documents
POST /documents/upload - Upload un fichier
DELETE /documents/:id - Supprime un documentconst { user, login, registerFournisseur, logout, error, loading } = useAuth();
await login(email, password); // Returns boolean
await registerFournisseur(formData); // Returns boolean
logout();const { fournisseurs, selected, setSelected, updateFournisseur } = useFournisseur();
await updateFournisseur(id, data); // Returns booleanconst { documents, uploading, upload, remove, loadDocuments } = useDocuments();
await upload(files, metadata); // Returns boolean
await remove(docId); // Supprime un document
loadDocuments(); // Recharge la listeLes erreurs d'authentification (401) sont gérées automatiquement :
- Utilisateur déconnecté
- LocalStorage vidé
- Redirection vers
/login
Les autres erreurs affichent le message du serveur (err.response?.data?.message).
MONGO_URI=mongodb://mongo:27017/hackathon
API_PORT=3000
NODE_ENV=development
JWT_SECRET=votre_secret_jwt
OCR_SERVICE_URL=http://ocr:8000/ocr
VITE_API_URL=http://localhost:3000
✅ Fait :
- Connexion login/register aux endpoints backend
- Gestion des tokens JWT
- Upload de documents via FormData
- Filtrage des fournisseurs par rôle
- Intercepteurs pour l'authentification
- Gestion des erreurs
- Les schémas MongoDB/contrôleurs du backend
- Les permissions/rôles pour les routes admin
- La configuration CORS si les frontends sont sur des ports différents
Erreur "VITE_API_URL not defined" :
→ Créer un fichier .env avec VITE_API_URL=http://localhost:3000
Erreur 401 lors du login : → Vérifier que le backend est démarré et que les credentials sont corrects
Erreur CORS : → Vérifier la configuration de la variable API_URL et que le backend autorise les requêtes cross-origin