Décisions architecturales
Décisions techniques notables
1. Architecture hexagonale + DDD
Séparation claire domaine / application / infrastructure. Les entités sont de vrais objets de domaine décorés TypeORM, pas de simples modèles de données.
2. Multi-tenancy par table de jointure
Une table ResourceUserRole associe un utilisateur à un rôle scopé à une ressource (company ou airline). Cela permet à un utilisateur d'avoir des rôles différents dans plusieurs organisations.
3. Auth0 + JWT interne
L'authentification passe par Auth0 (JWKS/RS256), puis un JWT interne est généré pour les sessions (expiration 14 jours). Rate limiting global : 100 requêtes / 60 secondes.
4. Soft delete (archivage)
Les entités ne sont pas supprimées mais archivées via un champ archivedAt. Cela préserve l'intégrité référentielle et la traçabilité.
5. Migrations explicites
synchronize: false dans TypeORM — toute modification de schéma passe par des fichiers de migration versionnés + scripts SQL de seeding.
6. TypeScript non-strict
strictNullChecks: false et noImplicitAny: false — choix pragmatique qui accélère le développement mais réduit la sécurité de typage.
7. REST pur (pas de GraphQL)
API versionnée par URI (/api/v1/), documentée via Swagger, avec validation DTO globale.
8. Intégration SimBrief
Système de vérification de compte SimBrief avec code temporaire (TTL 15 min) stocké en cache Redis.