Skip to content

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

mermaid
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 --> GCP

Les 6 Services

🔐 api-authentication

Responsabilité : Authentification, autorisation et gestion des utilisateurs

Port : 3000

Complexité : ⭐⭐⭐

CaractéristiqueDétail
Routes25+ endpoints
Modèles DB6 (User, RefreshToken, UserSession, etc.)
StackTypeScript, Prisma, JWT
Intégrationsapi-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

📖 Documentation complète


🏨 api-hotel

Responsabilité : Gestion complète des écosystèmes hôteliers

Port : 3002

Complexité : ⭐⭐⭐

CaractéristiqueDétail
Routes15+ endpoints
Modèles DB4 (hotels, groups, settings, type)
StackJavaScript, Prisma
IntégrationsSendbird (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

📖 Documentation complète


👥 api-staff-member

Responsabilité : Gestion des membres, workspaces et système RBAC

Port : 3001

Complexité : ⭐⭐⭐⭐⭐ (Service le plus complexe)

CaractéristiqueDétail
Routes120+ endpoints
Modèles DB18 (members, workspaces, roles, permissions, etc.)
StackJavaScript, Prisma, AMQP
Controllers18 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

📖 Documentation complète


📁 api-media

Responsabilité : Upload, stockage et gestion des médias

Port : 3003

Complexité : ⭐⭐⭐

CaractéristiqueDétail
Routes13+ endpoints
Modèles DB1 (legacy notifications schema)
StackJavaScript, Google Cloud Storage
IntégrationsGCP 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)

📖 Documentation complète


📰 api-news

Responsabilité : Système de gestion de contenu (CMS)

Port : 3004

Complexité : ⭐⭐⭐⭐

CaractéristiqueDétail
Routes80+ endpoints
Modèles DB14 (Page, Comment, Like, Category, etc.)
StackTypeScript, Prisma, AMQP, Cron
Modules8 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

📖 Documentation complète


🔔 api-notification

Responsabilité : Notifications multi-canal sophistiquées

Port : 3005

Complexité : ⭐⭐⭐⭐

CaractéristiqueDétail
Routes25+ endpoints
Modèles DB14 (Notification, Preference, Subscription, etc.)
StackTypeScript, Prisma, AMQP Consumer
CanauxPush (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

📖 Documentation complète


Matrice de Communication

Communication Synchrone (HTTP REST)

Service SourceService CibleEndpointUsage
api-hotelapi-staff-memberPOST /members/add/hotel/memberCréer admin hôtel
api-hotelapi-stripePOST /sub/assign-subscription/Créer abonnement
api-authenticationapi-staff-memberGET /members/get/with/:emailRécupérer profil
api-newsapi-staff-memberPOST /members/syncSynchroniser membres
api-notificationapi-staff-memberPOST /members/syncSynchroniser membres

Communication Asynchrone (AMQP Events)

ServiceRouting KeysDescription
api-authenticationroomee.auth.user.*Création/suppression user
api-hotelroomee.notification.hotel.*CRUD hôtels
api-hotelroomee.storage.mediaConfiguration storage
api-staff-memberroomee.notification.member.*CRUD membres
api-staff-memberroomee.notification.workspace.*CRUD workspaces
api-newsroomee.notification.page.*CRUD pages
api-newsroomee.notification.comment.*CRUD commentaires
api-newsroomee.notification.like.*Likes
api-notificationroomee.notification.*Consumer (reçoit tous)

Statistiques Comparatives

ServiceComplexitéRoutesModèles DBControllersTests
api-staff-member⭐⭐⭐⭐⭐120+1818
api-news⭐⭐⭐⭐80+148
api-notification⭐⭐⭐⭐25+146
api-authentication⭐⭐⭐25+64
api-hotel⭐⭐⭐15+46
api-media⭐⭐⭐13+13⚠️

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

ServicePort LocalPort DockerURL Production
api-authentication30003000auth.roomee.io
api-staff-member30013001members.roomee.io
api-hotel30023002hotel.roomee.io
api-media30033003media.roomee.io
api-news30043004news.roomee.io
api-notification30053005notification.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 :

  1. ✅ Toutes les requêtes filtrent par workspaceId
  2. ✅ Toutes les requêtes filtrent par deleted_at IS NULL
  3. ✅ Les permissions RBAC sont vérifiées à chaque endpoint
  4. ✅ Les événements AMQP incluent workspaceId et ecosystemId
  5. ✅ Les notifications Socket.IO utilisent des rooms par workspace

Démarrage Rapide

Tous les services

bash
# 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 test

Service spécifique

bash
# 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-autogen

Prochaines Étapes

Pour comprendre chaque service en détail, consultez leur documentation respective :

Pour comprendre comment les services interagissent entre eux, consultez la page Interactions entre Services.

Documentation technique Roomee Services