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.HOSTNAMEConstantsInUse.PORTSConstantsInUse.USERNAMEConstantsInUse.PASSWORD_DATABASEConstantsInUse.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,RoleUserProduct,ProductsCode,ProductsResources,ResourcesPeriod,ConstantSupportConversation,SupportTicket,SupportMessageUserFcmToken,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: truesur 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.