# Administration : API NestJS et Admin Server Express

## Vue d’ensemble

L’administration backend d’Uniksim repose sur **deux couches distinctes** qu’il ne faut pas confondre :

1. **les routes d’administration de l’API NestJS principale**, protégées par des guards et reliées aux services backend;
2. **un serveur Express d’administration séparé** dans `uniksim-back-end/src/node.js/server/admin_server.js`, qui écoute localement sur le port `8105` et gère surtout des opérations historiques/BrainCloud et certains flux SSE.

## Architecture backend d’administration

```mermaid
flowchart LR
    CLIENT[Clients Web / outils internes] --> NEST[NestJS principal]
    CLIENT --> EXPRESS[Admin Server Express :8105]

    NEST --> AC[AdminController]
    NEST --> AUC[AdminUserController]
    NEST --> APC[AdminPresenceController]
    NEST --> SAC[SupportAdminController]

    AC --> AS[AdminService]
    AUC --> AUS[AdminUserService]
    APC --> PS[PresenceService]

    AS --> DB[(MySQL / TypeORM)]
    AUS --> DB
    PS --> REDIS[(Redis)]

    EXPRESS --> BC[BrainCloud]
    EXPRESS --> REDIS
    EXPRESS --> SSE[SSE / copie de simulations]

```

## 1. Administration dans l’API NestJS

Les contrôleurs d’administration sont regroupés dans `uniksim-back-end/src/app.controller.ts` et enregistrés dans `AppModule`.

- `AdminUserController` sous `/admin` : récupération et gestion d’informations utilisateurs.
- `AdminPresenceController` sous `/admin/presence` : présence en ligne, état de jeu et télémétrie.
- `AdminController` : autres opérations administratives.
- `SupportAdminController` : fonctions administratives du support.

La logique métier correspondante se trouve notamment dans `src/service/admin.service.ts`, `src/service/adminUser.service.ts` et `src/service/presence.service.ts`.

## 2. Admin Server Express séparé

Le fichier `src/node.js/server/admin_server.js` démarre un serveur Express distinct sur `ConstantsInUse.ADMIN_SERVER_PORT`, actuellement `8105`. Son URL locale de référence est définie par `ADMIN_SERVER_URL` dans `constantsVariable.js`.

Ce serveur est utilisé notamment pour :

- `POST /admin/adminCommand` : commandes d’administration BrainCloud telles que lecture de documents, récupération de simulations, copie de simulation et suppression d’un utilisateur d’une simulation;
- `POST /redisBulkCommands` : commandes Redis groupées;
- `GET /getActiveSimulations/...` : récupération des simulations actives;
- `GET /copySimNotification` : progression d’une copie de simulation via SSE;
- surveillance de certains jobs BrainCloud et relance lorsqu’ils disparaissent.

## Flux d’une commande Admin Server

```mermaid
sequenceDiagram
    participant C as Client / outil admin
    participant E as Admin Server Express
    participant B as BrainCloud
    participant R as Redis
    participant S as Flux SSE

    C->>E: Requête admin
    alt Commande BrainCloud
        E->>B: Exécute la commande
        B-->>E: Résultat
    else Commande Redis
        E->>R: redisBulkCommands(...)
        R-->>E: Résultat
    else Copie de simulation
        E->>B: Copie données / simulation
        E-->>S: Progression
        S-->>C: Événements SSE
    end
    E-->>C: Réponse

```

## Sécurité backend

Les routes NestJS utilisent notamment `AuthGuardAdmin` et `AuthGuardAdminUser`. Toute modification d’une route d’administration doit vérifier le guard attendu et le rôle autorisé.

## Fichiers principaux

- `uniksim-back-end/src/app.controller.ts`
- `uniksim-back-end/src/app.module.ts`
- `uniksim-back-end/src/node.js/server/admin_server.js`
- `uniksim-back-end/src/node.js/server/constantsVariable.js`
- `uniksim-back-end/src/service/admin.service.ts`
- `uniksim-back-end/src/service/adminUser.service.ts`
- `uniksim-back-end/src/service/presence.service.ts`