Architecture
L'application est construite en utilisant Node.js et Express.js pour le backend, et TypeScript pour la gestion des types. Elle est organisée de manière modulaire pour faciliter la maintenance et l'évolution du code. Le code est divisé en plusieurs dossiers, suivant l'architecture MVC (Modèle-Vue-Contrôleur) :
configs: Contient les fichiers de configuration de l'application, qui définissent les paramètres de l'application.controllers: Contient les contrôleurs de l'application, qui gèrent la logique métier et les interactions avec les modèles.errors: Contient les fichiers de gestion des erreurs, qui définissent comment l'application gère les erreurs.interfaces: Contient les interfaces TypeScript, qui définissent les types de données utilisés dans l'application.middlewares: Contient les middlewares de l'application, qui interceptent les requêtes et les réponses pour effectuer des actions supplémentaires.models: Contient les modèles de données, qui définissent la structure des données utilisées par l'application.routes: Contient les routes de l'application, qui définissent les points d'entrée de l'API.schemas: Contient les schémas de validation des données, qui définissent la structure des données utilisées par les modèles.services: Contient les services de l'application, qui gèrent les tâches de fond et les interactions avec des services externes.tests: Contient les tests de l'application, qui vérifient que le code fonctionne comme prévu.utils: Contient les utilitaires de l'application, qui fournissent des fonctions réutilisables.validations: Contient les fichiers de validation des données, qui vérifient que les données envoyées à l'application respectent les formats attendus.views: Contient les vues de l'application, qui définissent la présentation des données envoyées aux utilisateurs.
Voici un aperçu de l'architecture :
. //racine du projet
│
├── documents // Différents documents de l'application
│ │
│ ├── api
│ │ │
│ │ ├── footer.md
│ │ └── presentation.md
│ │
│ └── files
│ │
│ ├── Baldr.excalidraw
│ └── diagram.mml
│
├── .github // Actions GitHub (generation de la documentation, tests, etc.)
│
├── src // Dossier principal de l'application
│ │
│ ├── app.ts // Fichier principal de l'application (lance l'application)
│ ├── index.ts // Point d'entrée de l'application (utilisé par app.ts)
│ │
│ ├── configs // Fichiers de configuration de l'application
│ │
│ ├── controllers // Contrôleurs de l'application
│ │ │
│ │ └── base.controller.ts // Contrôleur CRUD de base utilisé par tous les contrôleurs
│ │
│ ├── errors // Gestion des erreurs de l'application
│ │
│ ├── interfaces // Interfaces Typescript des différents modules utilisés dans les modèles mongoose
│ │ │
│ │ └── types // Définitions de types de données TypeScript utilisés dans les interfaces
│ │
│ ├── middlewares // Middleware de l'application
│ │
│ ├── models // Modèles de données utilisés par les modules (Mongoose)
│ │ │
│ │ └── schemas // Schémas de validation des données utilisés dans les modèles
│ │
│ ├── routes // Routes de l'API, auto-importées grace à `router.ts`
│ │
│ ├── scripts // Scripts utiliser lors du developpement
│ │ │
│ │ ├── generate-apidoc.js
│ │ └── generate-tests.js
│ │
│ ├── services // Services de l'application (taches de fond)
│ │ │
│ │ ├── crons
│ │ │
│ │ └── email
│ │
│ ├── tests
│ │ │
│ │ ├── datas // Données de test
│ │ │
│ │ ├── email // Tests d'envoi d'email
│ │ │
│ │ ├── modules // Tests des modules
│ │ │
│ │ └── unit // Tests unitaires
│ │
│ ├── utils // Script utilitaires de l'application
│ │
│ ├── validations // Validation des données
│ │
│ └── views // Vues de l'application backend (généralement utilisées pour les emails)
│ │
│ ├── assets // Assets de l'application (images, logos, etc.)
│ │
│ └── emails
│ │
│ ├── client
│ │
│ └── public
│
├── apidoc.json
├── babel.config.js
├── jest.config.ts
├── package.json
├── package-lock.json
├── tsconfig.json // ficher de configuration de TypeScript
├── .env
├── .env.example // Exemple de fichier .env à dupliquer, remplir et renommer en .env
└── .gitignore