Rapport SI40 Help

Technologies Utilisées

Architecture Globale

Le projet Moodle est construit selon une architecture moderne de type client-serveur, avec une séparation claire entre le frontend et le backend. Cette architecture permet une maintenance facilitée, une évolution indépendante des composants et une meilleure répartition des responsabilités.

Technologies Frontend

Angular

Le frontend de l'application est développé avec Angular, un framework JavaScript/TypeScript développé par Microsoft. Angular a été choisi pour plusieurs raisons :

  • Architecture MVC (Modèle-Vue-Contrôleur) qui favorise une organisation claire du code

  • Système de composants permettant la réutilisation et la maintenance facilitée

  • TypeScript apportant un typage fort et une meilleure détection des erreurs

  • Réactivité grâce à l'utilisation de RxJS pour la gestion des flux de données

  • Routage intégré pour la navigation entre les différentes vues

  • Formulaires réactifs pour une gestion avancée des formulaires et de la validation

Angular Material

L'interface utilisateur s'appuie sur Angular Material, une bibliothèque de composants UI pour Angular qui implémente les principes du Material Design de Google. Cela permet :

  • Une interface cohérente et moderne

  • Des composants prêts à l'emploi (boutons, cartes, tableaux, formulaires, etc.)

  • Une expérience utilisateur optimisée sur différents appareils

  • Une accessibilité améliorée

Technologies Backend

Node.js et Express

Le backend est construit avec Node.js et le framework Express, offrant :

  • Un environnement JavaScript unifié entre frontend et backend

  • Une gestion asynchrone efficace des requêtes

  • Une scalabilité adaptée aux besoins de l'application

  • Un écosystème riche de bibliothèques et middlewares

TypeScript

Tout comme le frontend, le backend utilise TypeScript pour :

  • Un typage fort des données

  • Les interfaces pour définir les modèles de données

  • Une meilleure maintenabilité du code

  • Une détection précoce des erreurs

  • Une documentation intégrée des interfaces et types

Base de Données

MongoDB

La persistance des données est assurée par MongoDB, une base de données NoSQL orientée documents :

  • Flexibilité du schéma permettant une évolution facile des modèles de données

  • Format JSON natif s'intégrant parfaitement avec JavaScript/TypeScript

  • Performances élevées pour les opérations de lecture/écriture

  • Scalabilité horizontale adaptée à la croissance de l'application

GridFS

Pour le stockage des fichiers (documents PDF, images, etc.), l'application utilise GridFS, une spécification MongoDB permettant :

  • Le stockage de fichiers volumineux (>16MB)

  • La gestion des métadonnées associées aux fichiers

  • Un streaming efficace pour le téléchargement/upload

Sécurité

JWT (JSON Web Tokens)

L'authentification et l'autorisation sont gérées via JWT:

  • Stateless authentication ne nécessitant pas de session côté serveur

  • Sécurité des échanges entre client et serveur

  • Informations utilisateur encapsulées dans le token

  • Expiration configurable des sessions

Bcrypt

Pour le hachage sécurisé des mots de passe, l'application utilise bcrypt:

  • Algorithme de hachage robuste contre les attaques par force brute

  • Salt automatique pour prévenir les attaques par table arc-en-ciel

  • Facteur de coût ajustable selon les besoins de sécurité

Outils de Développement

  • npm pour la gestion des dépendances

  • Git pour le versionnement du code

  • ESLint pour l'analyse statique du code

  • Prettier pour le formatage automatique du code

Architecture Détaillée

Architecture Backend

Le backend suit une architecture modulaire inspirée du modèle MVC (Modèle-Vue-Contrôleur) adaptée à une API REST :

  • Models: Définition des interfaces TypeScript représentant la structure des documents MongoDB

  • Services: Logique d'accès à la base de données et opérations métier

  • Controllers: Traitement des requêtes HTTP et renvoi des réponses

  • Routes: Définition des endpoints de l'API

Architecture Frontend

Le frontend est organisé selon les principes d'Angular :

  • Modules: Organisation du code en unités fonctionnelles

  • Composants: Éléments d'interface réutilisables

  • Services: Logique métier et communication avec le backend

  • Guards: Protection des routes selon les droits d'accès

28 June 2025