Introduction
AlgoForge utilise Bun avec Express pour servir l'application.
Structure de dossiers du back
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.
- Le serveur Express est initialisé avec les middlewares suivants :
-
Port :
- Le serveur écoute sur le port défini par la variable d'environnement
PORT
ou sur le port par défaut5205
.
- Le serveur écoute sur le port défini par la variable d'environnement
2. Gestion des Routes
-
Routes dynamiques (
AssetsDynamiques
) :- Les routes définies dans
AssetsDynamiques
sont ajoutées dynamiquement au serveur. - Exemple :
/edit/assetsDynamiques/<route>
.
- Les routes définies dans
-
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épertoirefront-editeur/out
./cloud
: Sert les fichiers statiques du répertoirefront-cloud/dist
.
-
Redirection de la racine :
- La route
/
redirige automatiquement vers/edit
.
- La route
-
Favicon :
- La route
/favicon.ico
sert le fichier favicon.
- La route
-
Chargement d'algorithmes :
- La route POST
/edit
permet de charger un algorithme en injectant son contenu dans le fichierindex.html
du frontend. - Les données envoyées incluent :
corpAlgo
: Le contenu JSON de l'algorithme.nomFichier
: Le nom de l'algorithme.
- La route POST
3. Préparation et Surveillance du Frontend
- Compilation avec
SmeltJS
:- La fonction
SmeltJS
utilisebun
pour installer les dépendances et exécuter le scriptSmeltJS.ts
dans le répertoirefront-editeur
. - Elle surveille les changements dans le répertoire
front-editeur/src
et relance automatiquement la compilation en cas de modification.
- La fonction
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
.
- La connexion à la base de données est gérée via
-
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.
- La connexion au service de messagerie est gérée via
5. Gestion des API
-
Contrôleurs :
- Les routes des API sont définies via des contrôleurs :
/api/algos
: Géré parAlgosController
./api/users
: Géré parUsersController
.
- Les routes des API sont définies via des contrôleurs :
-
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
-
Initialisation des Logs :
- Le chemin des logs est défini via
Logger.filePath
. - Un message de démarrage est enregistré.
- Le chemin des logs est défini via
-
Configuration des Routes :
- Les routes dynamiques, spécifiques, et statiques sont configurées.
-
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.
- Le script
-
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.
-
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
- Une requête POST est envoyée à
/edit
avec les données suivantes :{
"corpAlgo": "{\"key\": \"value\"}",
"nomFichier": "MonAlgorithme"
} - Le backend lit le fichier
index.html
du frontend. - Le contenu de l'algorithme (
corpAlgo
) est injecté dans un script à la fin du fichier HTML. - Le titre de la page est mis à jour avec le nom de l'algorithme (
nomFichier
). - 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épertoirefront-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");
});