Restructure the core API module to improve clarity, consistency, and maintainability: - Introduce `defineApiRoutes()` helper for declarative route definitions with built-in config validation at startup - Add `apiSuccess()` / `apiError()` response utilities; enforce their use across all handlers (core and modules) - Move auth enforcement to route definitions (`auth: 'public' | 'user' | 'admin'`), removing manual auth checks from handlers - Extract core routes into `core-routes.js`; router now has no knowledge of specific features - Rename `nx-route.js` to `route-handler.js` and update package.json export accordingly - Update ARCHITECTURE.md to reflect new API conventions and point to `src/core/api/README.md` for details
2.2 KiB
Architecture partagée
Ces modules existent pour éviter la duplication. Avant d'écrire du code utilitaire, vérifier s'il est déjà couvert ici.
Utilitaires serveur
| Besoin | Module |
|---|---|
| Logs serveur | src/shared/lib/logger.js |
| Manipulation de dates | src/shared/lib/dates.js |
| Configuration de l'app | src/shared/lib/appConfig.js |
| Formatage de devises | src/shared/utils/currency.js |
Composants et icônes
Icônes — Toutes les icônes sont centralisées dans src/shared/Icons.js. Ne pas créer d'icône directement dans un composant. Si une icône manque, l'ajouter dans Icons.js.
Composants — Utiliser src/shared/components en priorité. Si un besoin est réutilisable à plusieurs endroits et que le composant n'existe pas encore, le créer dans src/shared/components plutôt que dans le module.
Modules core
Notifications client — Utiliser src/core/toast pour toutes les notifications côté client.
Stockage — Utiliser src/core/storage. Toujours supprimer l'ancien fichier avant d'en écrire un nouveau à la même place. Éviter les fichiers fantômes (présents dans le stockage mais plus référencés dans l'app).
Paiements — Utiliser src/core/payments pour tout ce qui touche au système de paiement.
Courriel — Utiliser src/core/email pour l'envoi d'emails. Les gabarits réutilisables à l'échelle de l'app vont dans src/core/email/templates. Les gabarits spécifiques à un module peuvent rester dans les fichiers du module.
Base de données — Utiliser src/core/database pour toutes les communications avec la BD. Toujours utiliser des requêtes paramétrées (voir la section Sécurité ci-dessus).
Tâches planifiées — Utiliser src/core/cron pour créer des tâches cron.
API — Utiliser src/core/api pour l'API admin et publique. Définir les routes avec defineApiRoutes() (valide la config au démarrage). L'authentification est déclarée dans la définition de route (auth: 'public' | 'user' | 'admin') — ne jamais la vérifier manuellement dans un handler. Retourner apiSuccess() / apiError() dans tous les handlers. Voir src/core/api/README.md pour le détail.