Architecture Backend - Node.js/Express
Vue d'ensemble
Le backend Tranoo est une API RESTful dans le monorepo tranoo-api, construite avec Node.js, Express.js et MongoDB (Atlas), avec Firebase Admin pour l'authentification et les notifications.
Stack technique
| Composant | Technologie | Version |
|---|---|---|
| Runtime | Node.js | - |
| Framework | Express.js | ^5.1.0 |
| Base de données | MongoDB | ^6.18.0 |
| ODM | Mongoose | ^8.16.1 |
| Authentification | Firebase Admin | ^13.4.0 |
| Notifications | Firebase Messaging | ^11.9.1 |
| WebSocket | Socket.io | ^4.8.1 |
| Documentation API | Swagger UI | ^5.0.1 |
| Upload fichiers | Multer | ^2.0.2 |
| Stockage cloud | Cloudinary | ^2.8.0 |
| Géolocalisation | OpenStreetMap | - |
Structure du projet
tranoo-api/
├── src/
│ ├── app.js # Point d'entrée serveur
│ ├── config/ # Configuration
│ │ ├── authConfig.js # Configuration auth (OTP, MDP)
│ │ ├── agentConfig.js # Configuration agents
│ │ ├── swagger.js # Export spec Swagger
│ │ └── whatsappConfig.js # Configuration WhatsApp
│ ├── controllers/ # Logique métier (43 contrôleurs)
│ │ ├── authController.js
│ │ ├── userController.js
│ │ ├── articleController.js
│ │ ├── paymentController.js
│ │ ├── deliveryController.js
│ │ └── ...
│ ├── models/ # Schémas Mongoose (35 modèles)
│ │ ├── User.js
│ │ ├── Article.js
│ │ ├── Order.js
│ │ ├── Delivery.js
│ │ └── ...
│ ├── routes/ # Routes Express (45 fichiers)
│ │ ├── auth.js
│ │ ├── user.js
│ │ ├── article.js
│ │ └── ...
│ ├── middlewares/ # Middlewares Express
│ │ ├── auth.js # Vérification token Firebase
│ │ ├── role.js # Vérification rôles
│ │ ├── verifyCaptcha.js # Vérification CAPTCHA
│ │ ├── verifyAppCheck.js # Vérification App Check
│ │ └── authRateLimit.js # Rate limiting auth
│ ├── services/ # Services métier
│ │ ├── articlePublishService.js
│ │ └── locationGeocode.js
│ ├── docs/ # Documentation OpenAPI
│ │ └── openapi/
│ │ ├── index.js
│ │ ├── components.js
│ │ ├── tags.js
│ │ ├── helpers.js
│ │ └── paths/
│ ├── utils/ # Utilitaires
│ └── public/ # Fichiers statiques
├── scripts/ # Scripts utilitaires
│ └── verify_swagger_coverage.js
├── uploads/ # Uploads locaux
├── .env # Variables environnement
├── package.json
└── src/app.js # Point d'entrée
Points d'entrée
app.js - Point d'entrée principal
// Initialisation
- Configuration Express
- Connexion MongoDB
- Initialisation Firebase Admin
- Configuration Socket.io
- Montage des routes
- Exposition Swagger UI
- Gestion erreurs globales
Scripts npm
npm run dev # Développement avec nodemon
npm run start # Production
npm run swagger:count # Compter endpoints documentés
npm run swagger:verify # Vérifier couverture API
Architecture des contrôleurs
Contrôleurs principaux (43)
Authentification & Users
authController.js- Inscription, connexion, sessions webuserController.js- CRUD utilisateurs, profilsauthEventController.js- Événements auth
Commerce
articleController.js- Gestion articles/produitsachatController.js- AchatsorderController.js- CommandesinvoiceController.js- Factures
Livraison & Logistique (legacy — hors périmètre, remplacé par Livro)
deliveryController.js,livreurController.js, etc. — code historique, non documenté
Paiements
paymentController.js- Traitement paiements (Feexpay)walletController.js- Gestion walletssubscriptionController.js- AbonnementssubscriptionPricingController.js- Tarifs abonnement
Communication
chatController.js- Chat en temps réelnotificationController.js- Notifications pushwhatsappWebhook.js- Webhooks WhatsApp
Administration
agentController.js- Agents commerciaux (voir Agents commerciaux)statsController.js- StatistiquessettingsController.js- Paramètres systèmeverificationController.js- Vérifications documents
Transit
transitMissionController.js- Missions transit internationaltransitaireVerificationController.js- Vérification comptes transitairestransitaireReviewController.js- Avis transitaires
Autres
tricycleController.js- Contacts tricyclesreferralController.js- ParrainagepubliciteController.js- PublicitésuploadController.js- Upload fichiersgeoController.js- Géolocalisation
Architecture des modèles (35)
Utilisateurs & Auth
User.js- Utilisateurs (tous rôles)UserDevice.js- Appareils utilisateursAuthEvent.js- Événements authentificationPasswordResetRequest.js- Reset MDP
Commerce
Article.js- Articles/produitsAchat.js- AchatsOrder.js- CommandesInvoice.js- FacturesInvoiceSequence.js- Séquence factures
Livraison (legacy — voir Intégration Livro)
Delivery.js,DeliveryZone.js,DeliverySettings.js,LivreurBalance.js— modèles historiquesDemandeChauffeur.js- Demandes chauffeurs
Paiements
Payment.js- PaiementsSubscription.js- AbonnementsSubscriptionPricing.js- Tarifs abonnementSellerGainPricing.js- Tarifs vendeurs
Communication
ChatRoom.js- Salons chatMessage.js- MessagesNotification.js- Notifications
Transit
TransitMission.js- Missions transitTransitaireReview.js- Avis transitairesTransitaireSubscriptionPricing.js- Tarifs transitaires
Autres
TricycleContact.js- Contacts tricyclesReferral.js- ParrainagesReferralTariff.js- Tarifs parrainageReferralSettings.js- Configuration parrainagePublicite.js- PublicitésPubPricing.js- Tarifs publicitéVerificationPricing.js- Tarifs vérification
Middlewares
auth.js
Vérifie le token Firebase et attache l'utilisateur à la requête.
role.js
Vérifie les rôles utilisateur (admin, vendeur, transitaire, etc.).
verifyCaptcha.js
Vérifie le CAPTCHA (Turnstile) pour les actions sensibles.
verifyAppCheck.js
Vérifie Firebase App Check pour sécuriser les apps mobiles.
authRateLimit.js
Rate limiting sur les endpoints d'authentification.
Socket.io - WebSocket
Configuration
- CORS autorisé pour toutes origines
- Stockage des connexions utilisateurs (Map)
- Authentification via token Firebase
Events
Client → serveur
authenticate— Authentification socket (token Firebase)join-room/leave-room— Salons chattyping-start/typing-stop— Indicateur de frappe
Serveur → client
authenticated— Confirmation auth sockettyping-indicator— État de frappe des participants
Firebase Integration
Firebase Admin
- Authentification (vérification tokens)
- Cloud Messaging (notifications push)
- Storage (stockage fichiers)
App Check
- Middleware
verifyAppCheck.jsimplémenté — non monté sur les routes actuellement
Workers au démarrage
Lancés depuis src/app.js :
- Payment status worker — suivi des paiements FeexPay
- Cron jobs — expiration publicités, vues automatiques articles
- Delivery offer worker — (legacy, livraison interne)
Documentation source
Guides dans tranoo-api/docs/ : SWAGGER.md, CAPTCHA.md, I18N.md, MIGRATION_AUTH_TELEPHONE.md
Environnement
Variables .env requises
MONGO_URI= # URI MongoDB Atlas (variable runtime)
FIREBASE_SERVICE_ACCOUNT_JSON= # Clé service account Firebase (prod)
GOOGLE_APPLICATION_CREDENTIALS= # Alternative fichier credentials
PORT=5000 # Port serveur (5005 en .env.prod)
NODE_ENV=development # Environnement
WEB_SESSION_IDLE_MS=1800000 # Session web dashboard (30 min)
Sécurité
Authentification
- Firebase ID tokens
- Vérification token à chaque requête protégée
- Sessions web avec X-Web-Session-Id
Rate Limiting
- Limitation sur endpoints d'authentification
- Protection contre brute force
Validation
- Validation des entrées via Mongoose
- CAPTCHA sur actions sensibles
- App Check pour mobiles
Logs et monitoring
- Logs console pour développement
- Gestion erreurs globales
- Tracking des événements auth
Déploiement
Développement
npm run dev
# Serveur sur http://localhost:5000
# Swagger UI sur http://localhost:5000/api-docs
Production
npm run start
# PM2 documenté : pm2 restart tranoo-api --update-env
# API prod : https://api.tranoo.store
Prochaines étapes
Voir aussi :
- API Swagger - Documentation API complète
- Base de données - Schémas MongoDB détaillés
- Authentification - Système d'authentification Firebase
- Transit international - Missions transitaires
- Agents commerciaux - KPIs et démos agents
- Livro - Livraison tiers