Skip to main content

Base de données et persistance

Vue d’ensemble

Le backend utilise principalement MySQL via TypeORM pour les données relationnelles, et Redis pour plusieurs données temporaires ou temps réel.

Architecture de persistance

flowchart TD
    API[NestJS Controllers] --> SERVICES[Services métier]
    SERVICES --> ORM[TypeORM]
    ORM --> MYSQL[(MySQL)]

    SERVICES --> REDIS[RedisService]
    REDIS --> CACHE[(Redis)]

    SERVICES --> BC[BrainCloud]

    MYSQL --> E1[Users / rôles]
    MYSQL --> E2[Produits / codes]
    MYSQL --> E3[Support]
    MYSQL --> E4[FCM installations]

    CACHE --> R1[Présence]
    CACHE --> R2[Sessions]
    CACHE --> R3[Notifications]
    CACHE --> R4[Rankings / données temps réel]

Configuration TypeORM

Le point central est uniksim-back-end/src/database.providers.ts.

La connexion est créée avec TypeOrmModule.forRoot(...) et utilise :

  • ConstantsInUse.HOSTNAME
  • ConstantsInUse.PORTS
  • ConstantsInUse.USERNAME
  • ConstantsInUse.PASSWORD_DATABASE
  • ConstantsInUse.PROVIDERS

Le backend est configuré avec synchronize: false. Les changements de schéma ne doivent donc pas être supposés automatiques.

Entités principales

Les entités TypeORM sont dans uniksim-back-end/src/entities/. Parmi les principales :

  • User, Role, RoleUser
  • Product, ProductsCode, ProductsResources, Resources
  • Period, Constant
  • SupportConversation, SupportTicket, SupportMessage
  • UserFcmToken, UserFcmSubscription

Redis

Redis n’est pas seulement un cache. Il est utilisé pour plusieurs fonctions runtime importantes, notamment :

  • présence et heartbeats;
  • sessions de jeu;
  • notifications persistées temporairement;
  • rankings et certaines données de simulation;
  • communication de certains services historiques.

Choisir le bon stockage

flowchart LR
    CHANGE[Besoin métier] --> ENTITY{Donnée relationnelle ?}
    ENTITY -- Oui --> MODEL[Entity TypeORM]
    MODEL --> ORM[Repository / Service]
    ORM --> SCHEMA[Vérifier schéma SQL / migration]

    ENTITY -- Non --> RUNTIME{Temporaire ou temps réel ?}
    RUNTIME -- Oui --> REDIS[RedisService]
    RUNTIME -- Non --> OTHER[Vérifier BrainCloud / stockage existant]

Points d’attention

  • Ne pas activer synchronize: true sur un environnement partagé pour contourner un changement de schéma.
  • Vérifier les relations d’entités avant de supprimer ou renommer une colonne.
  • Redis contient des données applicatives importantes : un flush peut affecter sessions, présence ou notifications.
  • Avant d’ajouter un nouveau stockage, vérifier si le système utilise déjà MySQL, Redis ou BrainCloud pour ce type de donnée.