Skip to main content

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.