Aller au contenu principal

Introduction

AlgoForge utilise Bun avec Express pour servir l'application.

Structure de dossiers du back

Chargement...

index.ts

Description Générale

Le fichier index.ts est le point d'entrée principal du backend de l'application AlgoForge. Il configure et démarre un serveur Express, initialise les connexions à la base de données et au service de messagerie, et met en place les routes nécessaires pour gérer les fonctionnalités de l'application. Ce fichier orchestre également la compilation et la surveillance des fichiers du frontend via le script SmeltJS.


Fonctionnalités Principales

1. Configuration du Serveur Express

  • Initialisation :

    • Le serveur Express est initialisé avec les middlewares suivants :
      • cors : Permet les requêtes cross-origin.
      • express.urlencoded : Parse les données encodées en URL.
      • express.json : Parse les données JSON dans les requêtes.
  • Port :

    • Le serveur écoute sur le port défini par la variable d'environnement PORT ou sur le port par défaut 5205.

2. Gestion des Routes

  • Routes dynamiques (AssetsDynamiques) :

    • Les routes définies dans AssetsDynamiques sont ajoutées dynamiquement au serveur.
    • Exemple : /edit/assetsDynamiques/<route>.
  • Routes spécifiques :

    • getBibliothèque : Fournit une bibliothèque spécifique via une route définie.
    • iconHandler : Gère les icônes via une route définie.
  • Routes statiques :

    • /edit : Sert les fichiers statiques du répertoire front-editeur/out.
    • /cloud : Sert les fichiers statiques du répertoire front-cloud/dist.
  • Redirection de la racine :

    • La route / redirige automatiquement vers /edit.
  • Favicon :

    • La route /favicon.ico sert le fichier favicon.
  • Chargement d'algorithmes :

    • La route POST /edit permet de charger un algorithme en injectant son contenu dans le fichier index.html du frontend.
    • Les données envoyées incluent :
      • corpAlgo : Le contenu JSON de l'algorithme.
      • nomFichier : Le nom de l'algorithme.

3. Préparation et Surveillance du Frontend

  • Compilation avec SmeltJS :
    • La fonction SmeltJS utilise bun pour installer les dépendances et exécuter le script SmeltJS.ts dans le répertoire front-editeur.
    • Elle surveille les changements dans le répertoire front-editeur/src et relance automatiquement la compilation en cas de modification.

4. Initialisation des Connexions

  • Base de données :

    • La connexion à la base de données est gérée via AppDataSource.
    • En cas d'échec, plusieurs tentatives de reconnexion sont effectuées (définies par RETRY_MANY_TIMES).
    • Les logs des tentatives et des erreurs sont enregistrés via le Logger.
  • Service de messagerie :

    • La connexion au service de messagerie est gérée via Transporter.
    • Si le service de messagerie est désactivé (MAIL_ENABLED), un avertissement est enregistré.
    • En cas d'échec, plusieurs tentatives de reconnexion sont effectuées.

5. Gestion des API

  • Contrôleurs :

    • Les routes des API sont définies via des contrôleurs :
      • /api/algos : Géré par AlgosController.
      • /api/users : Géré par UsersController.
  • Middlewares :

    • loggerMiddleware : Enregistre les logs des requêtes API.
    • errorMiddleware : Gère les erreurs globales de l'application.

6. Démarrage du Serveur

  • Une fois toutes les connexions (base de données, messagerie) et la compilation du frontend terminées, le serveur démarre.
  • Le serveur écoute sur l'URL http://localhost:<port>.

Étapes du Processus

  1. Initialisation des Logs :

    • Le chemin des logs est défini via Logger.filePath.
    • Un message de démarrage est enregistré.
  2. Configuration des Routes :

    • Les routes dynamiques, spécifiques, et statiques sont configurées.
  3. Préparation du Frontend :

    • Le script SmeltJS est exécuté pour compiler les fichiers du frontend.
    • Une surveillance des changements dans le répertoire front-editeur/src est mise en place.
  4. Initialisation des Connexions :

    • La base de données et le service de messagerie sont initialisés avec des tentatives de reconnexion en cas d'échec.
  5. Démarrage du Serveur :

    • Une fois toutes les connexions établies, le serveur démarre et les routes API sont activées.

Exemple de Fonctionnement

Chargement d'un Algorithme via /edit

  1. Une requête POST est envoyée à /edit avec les données suivantes :
    {
    "corpAlgo": "{\"key\": \"value\"}",
    "nomFichier": "MonAlgorithme"
    }
  2. Le backend lit le fichier index.html du frontend.
  3. Le contenu de l'algorithme (corpAlgo) est injecté dans un script à la fin du fichier HTML.
  4. Le titre de la page est mis à jour avec le nom de l'algorithme (nomFichier).
  5. Le fichier HTML modifié est renvoyé au client.

Points Techniques

1. Surveillance des Fichiers

  • La fonction watch de Node.js est utilisée pour surveiller les changements dans le répertoire front-editeur/src.
  • En cas de modification, le script SmeltJS.ts est relancé pour recompiler les fichiers.

2. Gestion des Erreurs

  • Les erreurs de connexion à la base de données et au service de messagerie sont gérées avec des tentatives de reconnexion.
  • Les erreurs globales de l'application sont capturées par errorMiddleware.

3. Utilisation de bun

  • bun est utilisé pour gérer les dépendances et exécuter les scripts de compilation du frontend.

Exemple de Code

Démarrage du Serveur

app.listen(port, () => {
Logger.log(`Server is running on http://localhost:${port}`, "main");
});

Surveillance des Fichiers Frontend

watch(path.join(__dirname, "/../front-editeur/src"), { recursive: true }, async () => {
console.log(await $`bun SmeltJS.ts`.cwd(`../front-editeur`).text());
});

Connexion à la Base de Données

AppDataSource.initialize()
.then(() => {
Logger.log("Database connected.", "main: db");
})
.catch((err) => {
Logger.error(`Error while connecting to database: \n${err}`, "main: db");
});