Conception d'architecture
SaaS multi-tenant de gestion de salles de sport
Une seule plateforme au service de nombreuses salles indépendantes, chacune avec ses adhérents, ses coachs et son planning de cours. Le planning est la fonctionnalité centrale ; la facturation et les rappels s'appuient dessus.
- Node.js
- Express
- MongoDB
- Redis
- React
- App adhérent → API Node.js
- Tableau de bord → API Node.js
- API Node.js → Auth & tenants
- API Node.js → Planning
- API Node.js → Abonnements
- API Node.js → Notifications
- Auth & tenants → MongoDB
- Planning → MongoDB
- Abonnements → MongoDB
- Notifications → File Redis
- File Redis → SMS / WhatsApp
- Abonnements → Passerelle de paiement
Faites défiler horizontalement pour voir tout le schéma.
Décisions clés
01Une base partagée, tenantId sur chaque document
- Pourquoi
- Des centaines de petites salles imposent un onboarding peu coûteux, un seul schéma à migrer et une seule sauvegarde.
- Compromis
- L'isolation dépend du code. Toutes les requêtes passent par un repository limité au tenant et sont couvertes par des tests ; une grande chaîne pourra plus tard avoir sa propre base.
02Monolithe modulaire, pas de microservices
- Pourquoi
- Une petite équipe livre plus vite avec un seul déploiement. Les modules (planning, facturation, notifications) ont des frontières claires pour être extraits plus tard.
- Compromis
- Tout évolue ensemble. C'est acceptable pour cette charge, et moins cher à exploiter jusqu'à ce que ça ne le soit plus.
03Planning d'abord, avec des réservations atomiques
- Pourquoi
- Le planning des cours et des coachs est la fonctionnalité d'entrée. Une réservation décrémente la capacité en une seule mise à jour conditionnelle : deux adhérents ne peuvent jamais prendre la dernière place.
- Compromis
- La promotion de la liste d'attente ajoute de la logique (qui obtient une place libérée, et quand). Ça en vaut la peine : les cours complets sont là où les salles perdent de l'argent.
04File d'attente pour les rappels et renouvellements
- Pourquoi
- Les rappels et les renouvellements ne doivent ni ralentir les requêtes ni se perdre lors d'un redémarrage.
- Compromis
- Une brique d'infrastructure de plus à exploiter et à surveiller.
05Paiements derrière une interface
- Pourquoi
- Les salles en Tunisie encaissent souvent en espèces ou via des moyens locaux. Le module d'abonnements enregistre d'abord les paiements et parle à une passerelle via une interface : on peut ajouter un prestataire local sans toucher au reste.
- Compromis
- Rapprocher espèces et paiements en ligne demande des états clairs par facture.