Aller au contenu

Architecture du système

Vue d'ensemble

La plateforme Kogitec est une application web full-stack construite en TypeScript, organisée en un monorepo avec npm workspaces. L'architecture suit un modèle modulaire où chaque module encapsule ses responsabilités client, serveur et communes.

Diagramme d'architecture

graph TB
    subgraph Client["Client (React 19 + Vite 8)"]
        App["App Entry Point"]
        App --> BenevaUI["Beneva UI"]
        App --> MetalturaUI["Metaltura UI"]
        App --> KitchenUI["Kitchen UI"]
        App --> ChatUI["Chat UI"]
        App --> ConsoleUI["Console UI"]
    end

    subgraph Server["Serveur (Express 5)"]
        Express["Express Server"]
        Express --> SocketIO["Socket.io Server"]
        Express --> MongoDB["MongoDB 7"]
    end

    subgraph Platform["Modules Plateforme"]
        Core["core"]
        Schema["schema"]
        Socket["socket"]
        Doc["doc"]
        Security["security"]
        Metaltura["metaltura"]
        Console["console"]
    end

    Client <-->|WebSocket| SocketIO
    Client <-->|HTTP| Express

Graphe de dépendances des modules plateforme

graph TD
    Console["console"] --> Core["core"]
    Console --> Schema["schema"]
    Console --> Security["security"]
    Console --> Doc["doc"]
    Console --> Socket["socket"]
    Console --> Metaltura["metaltura"]

    Security --> Core
    Security --> Socket
    Security --> Doc
    Security --> Schema

    Metaltura --> Core
    Metaltura --> Socket
    Metaltura --> Doc
    Metaltura --> Schema

    Doc --> Core
    Doc --> Socket
    Doc --> Schema

    Schema --> Core
    Schema --> Socket

    Socket --> Core

Graphe de dépendances des modules application

graph TD
    App["app"] --> Core["core"]
    App --> Schema["schema"]
    App --> Socket["socket"]
    App --> Doc["doc"]
    App --> Security["security"]
    App --> Metaltura["metaltura"]
    App --> Console["console"]
    App --> Members["members"]
    App --> Chat["chat"]
    App --> Kitchen["kitchen"]
    App --> Beneva["beneva"]

    Kitchen --> Members
    Kitchen --> Core
    Kitchen --> Schema
    Kitchen --> Doc
    Kitchen --> Socket

    Chat --> Core
    Chat --> Socket
    Chat --> Doc
    Chat --> Schema

    Members --> Core
    Members --> Doc
    Members --> Schema

    Beneva --> Core
    Beneva --> Doc
    Beneva --> Schema

Couches de communication

Transport WebSocket (Socket.io)

Le transport WebSocket gère les communications en temps réel entre le client et le serveur :

sequenceDiagram
    participant Client
    participant Socket.io
    participant ServerService
    participant MongoDB

    Client->>Socket.io: socket.emit('service', name, method, args)
    Socket.io->>ServerService: handleServiceCall(name, method, args)
    ServerService->>MongoDB: Query/Mutation
    MongoDB-->>ServerService: Result
    ServerService-->>Socket.io: callback({ result })
    Socket.io-->>Client: Response

Publications et souscriptions

Le système pub/sub permet aux clients de recevoir des mises à jour en temps réel :

sequenceDiagram
    participant Client
    participant SubscriptionContext
    participant ServerPubService
    participant MongoDB

    Client->>SubscriptionContext: useSubscription(definition, params)
    SubscriptionContext->>ServerPubService: subscribe(params)
    ServerPubService->>MongoDB: Watch/Query
    MongoDB-->>ServerPubService: Data
    ServerPubService-->>SubscriptionContext: pubSubMessage(data)
    SubscriptionContext-->>Client: callback(data)

Structure d'un module

Chaque module suit la même structure interne :

modules/<catégorie>/<nom>/
├── package.json          # Dépendances inter-modules uniquement
├── tsconfig.json         # Étend la config racine
└── src/
    ├── client/           # Composants React, hooks, logique côté client
    │   └── index.ts      # Export barrel public
    ├── server/           # Routes Express, services, accès BD
    │   └── index.ts      # Export barrel public
    └── common/           # Types partagés, entités, utilitaires
        └── index.ts      # Export barrel public

Flux de données

flowchart LR
    A[Composant React] -->|useService| B[Socket.io Client]
    B -->|WebSocket| C[Socket.io Server]
    C -->|ServerService| D[Service]
    D -->|ServerDocService| E[MongoDB]
    E -->|Publication| F[ServerPubService]
    F -->|pubSubMessage| B
    B -->|useSubscription| A

Déploiement

L'application est conteneurisée avec Docker et déployée via GitHub Actions :

flowchart LR
    A[Push Git] --> B[GitHub Actions]
    B --> C[Tests]
    C --> D[Build Client + Serveur]
    D --> E[Docker Build]
    E --> F[Push GHCR]
    F --> G[Docker Compose]
    G --> H[Traefik Reverse Proxy]