Services
Vue d'ensemble
La plateforme Roomee est composée de 6 microservices backend indépendants, chacun ayant une responsabilité clairement définie. Cette architecture permet une scalabilité, une maintenabilité et un déploiement optimaux.
Architecture des Services
graph TB
subgraph "Frontend"
WEB[Web App React]
MOBILE[Mobile App React Native]
end
subgraph "Services Backend"
AUTH[🔐 api-authentication<br/>Auth & Users]
HOTEL[🏨 api-hotel<br/>Ecosystems]
MEMBER[👥 api-staff-member<br/>Members & RBAC]
MEDIA[📁 api-media<br/>Storage]
NEWS[📰 api-news<br/>CMS]
NOTIF[🔔 api-notification<br/>Notifications]
end
subgraph "Infrastructure"
AMQP[RabbitMQ Event Bus]
MONGO[(MongoDB)]
GCP[Google Cloud Storage]
end
WEB --> AUTH
WEB --> HOTEL
WEB --> MEMBER
WEB --> NEWS
MOBILE --> AUTH
MOBILE --> MEMBER
AUTH --> AMQP
HOTEL --> AMQP
MEMBER --> AMQP
NEWS --> AMQP
MEDIA --> AMQP
NOTIF --> AMQP
AUTH --> MONGO
HOTEL --> MONGO
MEMBER --> MONGO
NEWS --> MONGO
NOTIF --> MONGO
MEDIA --> GCPLes 6 Services
🔐 api-authentication
Responsabilité : Authentification, autorisation et gestion des utilisateurs
Port : 3000
Complexité : ⭐⭐⭐
| Caractéristique | Détail |
|---|---|
| Routes | 25+ endpoints |
| Modèles DB | 6 (User, RefreshToken, UserSession, etc.) |
| Stack | TypeScript, Prisma, JWT |
| Intégrations | api-staff-member (profil membre) |
Fonctionnalités clés :
- Inscription et connexion (email/password)
- Gestion des tokens JWT (access + refresh)
- Invitations par email
- Réinitialisation de mot de passe
- Gestion des sessions utilisateur
- OAuth (Google, GitHub) - à venir
🏨 api-hotel
Responsabilité : Gestion complète des écosystèmes hôteliers
Port : 3002
Complexité : ⭐⭐⭐
| Caractéristique | Détail |
|---|---|
| Routes | 15+ endpoints |
| Modèles DB | 4 (hotels, groups, settings, type) |
| Stack | JavaScript, Prisma |
| Intégrations | Sendbird (chat), Stripe (paiements), OpenWeather |
Fonctionnalités clés :
- CRUD des hôtels et groupes
- Génération de QR codes
- Configuration Sendbird Chat par écosystème
- Gestion des abonnements Stripe
- Paramètres et types d'écosystème
- Intégration météo par localisation
👥 api-staff-member
Responsabilité : Gestion des membres, workspaces et système RBAC
Port : 3001
Complexité : ⭐⭐⭐⭐⭐ (Service le plus complexe)
| Caractéristique | Détail |
|---|---|
| Routes | 120+ endpoints |
| Modèles DB | 18 (members, workspaces, roles, permissions, etc.) |
| Stack | JavaScript, Prisma, AMQP |
| Controllers | 18 contrôleurs différents |
Fonctionnalités clés :
- Gestion complète des membres (CRUD, hiérarchies)
- Workspaces multi-tenant
- Système RBAC à 2 niveaux (écosystème + workspace)
- Roles et permissions granulaires
- Équipes et départements
- Onboarding et invitations
- Paramètres utilisateur et préférences
📁 api-media
Responsabilité : Upload, stockage et gestion des médias
Port : 3003
Complexité : ⭐⭐⭐
| Caractéristique | Détail |
|---|---|
| Routes | 13+ endpoints |
| Modèles DB | 1 (legacy notifications schema) |
| Stack | JavaScript, Google Cloud Storage |
| Intégrations | GCP Storage, Sharp (thumbnails) |
Fonctionnalités clés :
- Upload direct vers Google Cloud Storage
- Génération de presigned URLs (15 min)
- Création automatique de thumbnails
- Conversion de formats (WebP, JPEG)
- Gestion des quotas par écosystème (20GB)
- Upload par chunks pour mobile (50MB max)
- Éditeur de contenu (Editor.js integration)
📰 api-news
Responsabilité : Système de gestion de contenu (CMS)
Port : 3004
Complexité : ⭐⭐⭐⭐
| Caractéristique | Détail |
|---|---|
| Routes | 80+ endpoints |
| Modèles DB | 14 (Page, Comment, Like, Category, etc.) |
| Stack | TypeScript, Prisma, AMQP, Cron |
| Modules | 8 modules métier |
Fonctionnalités clés :
- Gestion de pages hiérarchiques (feeds, articles, événements)
- Système de commentaires et réactions (likes, emojis)
- Catégories et tags
- Publications programmées (scheduled posts)
- Templates de contenu
- Vues et statistiques
- Épinglage de pages importantes
- Préférences de pages par utilisateur
- Synchronisation automatique des membres
🔔 api-notification
Responsabilité : Notifications multi-canal sophistiquées
Port : 3005
Complexité : ⭐⭐⭐⭐
| Caractéristique | Détail |
|---|---|
| Routes | 25+ endpoints |
| Modèles DB | 14 (Notification, Preference, Subscription, etc.) |
| Stack | TypeScript, Prisma, AMQP Consumer |
| Canaux | Push (OneSignal, FCM), Email (SendGrid), In-App, Socket |
Fonctionnalités clés :
- Notifications push (OneSignal + Firebase)
- Emails transactionnels (SendGrid)
- Notifications in-app avec compteurs
- Notifications temps réel (Socket.IO)
- Système de templates de notifications
- Préférences utilisateur granulaires (par catégorie)
- Heures silencieuses (quiet hours)
- Historique et archivage automatique
- Tentatives de livraison avec retry
- Statistiques et métriques
Matrice de Communication
Communication Synchrone (HTTP REST)
| Service Source | Service Cible | Endpoint | Usage |
|---|---|---|---|
| api-hotel | api-staff-member | POST /members/add/hotel/member | Créer admin hôtel |
| api-hotel | api-stripe | POST /sub/assign-subscription/ | Créer abonnement |
| api-authentication | api-staff-member | GET /members/get/with/:email | Récupérer profil |
| api-news | api-staff-member | POST /members/sync | Synchroniser membres |
| api-notification | api-staff-member | POST /members/sync | Synchroniser membres |
Communication Asynchrone (AMQP Events)
| Service | Routing Keys | Description |
|---|---|---|
| api-authentication | roomee.auth.user.* | Création/suppression user |
| api-hotel | roomee.notification.hotel.* | CRUD hôtels |
| api-hotel | roomee.storage.media | Configuration storage |
| api-staff-member | roomee.notification.member.* | CRUD membres |
| api-staff-member | roomee.notification.workspace.* | CRUD workspaces |
| api-news | roomee.notification.page.* | CRUD pages |
| api-news | roomee.notification.comment.* | CRUD commentaires |
| api-news | roomee.notification.like.* | Likes |
| api-notification | roomee.notification.* | Consumer (reçoit tous) |
Statistiques Comparatives
| Service | Complexité | Routes | Modèles DB | Controllers | Tests |
|---|---|---|---|---|---|
| api-staff-member | ⭐⭐⭐⭐⭐ | 120+ | 18 | 18 | ✅ |
| api-news | ⭐⭐⭐⭐ | 80+ | 14 | 8 | ✅ |
| api-notification | ⭐⭐⭐⭐ | 25+ | 14 | 6 | ✅ |
| api-authentication | ⭐⭐⭐ | 25+ | 6 | 4 | ✅ |
| api-hotel | ⭐⭐⭐ | 15+ | 4 | 6 | ✅ |
| api-media | ⭐⭐⭐ | 13+ | 1 | 3 | ⚠️ |
Technologies par Service
Stack Legacy (JavaScript)
Services : api-hotel, api-media, api-staff-member
Structure :
├── app.js
├── loader.js
├── controllers/
├── routes/
├── repository/
├── middlewares/
├── utils/
├── prisma/
└── __tests/Stack Moderne (TypeScript)
Services : api-authentication, api-news, api-notification
Structure :
├── src/
│ ├── app.ts
│ ├── server.ts
│ ├── modules/
│ ├── config/
│ ├── core/
│ └── prisma-client/Migration en cours : Transition progressive JS → TS avec standardisation via @roomee/shared
Ports et URLs
| Service | Port Local | Port Docker | URL Production |
|---|---|---|---|
| api-authentication | 3000 | 3000 | auth.roomee.io |
| api-staff-member | 3001 | 3001 | members.roomee.io |
| api-hotel | 3002 | 3002 | hotel.roomee.io |
| api-media | 3003 | 3003 | media.roomee.io |
| api-news | 3004 | 3004 | news.roomee.io |
| api-notification | 3005 | 3005 | notification.roomee.io |
Isolation Multi-Tenant
Tous les services respectent l'isolation multi-tenant à plusieurs niveaux :
Plateforme Roomee
└── Écosystème (ecosystemId / hotelId)
└── Workspace (workspaceId)
└── Membres (memberId)Règles d'isolation :
- ✅ Toutes les requêtes filtrent par
workspaceId - ✅ Toutes les requêtes filtrent par
deleted_at IS NULL - ✅ Les permissions RBAC sont vérifiées à chaque endpoint
- ✅ Les événements AMQP incluent
workspaceIdetecosystemId - ✅ Les notifications Socket.IO utilisent des rooms par workspace
Démarrage Rapide
Tous les services
# Installation des dépendances
pnpm install
# Démarrage en développement
pnpm dev
# Build de tous les services
pnpm build
# Tests de tous les services
pnpm testService spécifique
# Navigation vers le service
cd services/api-authentication
# Développement avec hot reload
npm run dev
# Tests
npm run test
# Build
npm run build
# Documentation Swagger
npm run swagger-autogenProchaines Étapes
Pour comprendre chaque service en détail, consultez leur documentation respective :
- 🔐 api-authentication - Authentification JWT
- 🏨 api-hotel - Gestion des écosystèmes
- 👥 api-staff-member - Membres et RBAC
- 📁 api-media - Stockage et médias
- 📰 api-news - CMS et contenus
- 🔔 api-notification - Notifications multi-canal
Pour comprendre comment les services interagissent entre eux, consultez la page Interactions entre Services.