Philosophie
L'application est conçue pour être modulaire et extensible, permettant d'ajouter facilement de nouveaux modules et fonctionnalités. Chaque module est indépendant et peut être développé, testé et déployé séparément. Cela permet une grande flexibilité et une meilleure gestion des versions.
L'application utilise TypeScript pour la gestion des types, ce qui permet de détecter les erreurs de type à la compilation et d'améliorer la lisibilité du code. Les fichiers de configuration sont séparés du code principal, ce qui facilite la gestion des environnements de développement, de test et de production.
L'application utilise également des middlewares pour gérer les requêtes et les réponses, ce qui permet de séparer la logique métier des autres logiques internes. Les contrôleurs gèrent la logique métier et les interactions avec les modèles, tandis que les middlewares gerent les permissions et autres logiques de sécurité.
Les modèles de données définissent la structure des données utilisées par les modules. Les modèles sont basés sur Mongoose, ce qui permet de gérer facilement les interactions avec la base de données MongoDB.
Les schémas de validation sont utilisé pour vérifier que les données envoyées à l'application respectent les formats attendus. Cela permet de garantir l'intégrité des données et de prévenir les erreurs.
Les routes de l'API sont auto-importées grâce à un script, ce qui permet de simplifier la gestion des routes et de réduire le risque d'erreurs. Les routes sont organisées par module, ce qui facilite la navigation dans le code.
Les tests sont organisés par module et par type de test (tests unitaires, tests d'intégration, etc.). Les tests sont exécutés automatiquement lors de la construction de l'application, ce qui permet de garantir que le code fonctionne comme prévu.
L'application utilise également des utilitaires pour fournir des fonctions réutilisables par les controlleurs, ce qui permet de réduire la duplication de code et d'améliorer la lisibilité du code. Les utilitaires sont organisés par type de fonction, ce qui facilite la navigation.