Skip to content

Conception globale

Vincent Zwingmann edited this page Jul 8, 2026 · 5 revisions

Diagrammes C4

Les diagrammes C4 sont mutualisés avec le wiki IHM et constituent la référence visuelle commune frontend/backend.

C1 - Contexte

Diagramme C1

C2 - Conteneurs "Application Budgets"

Diagramme C2

Architecture hexagonale

Chaque microservice applique le même modèle en couches :

api/          → Contrôleurs JAX-RS (REST), enums d'URL, surcharges sécurité/exceptions
business/     → Logique métier (@ApplicationScoped), interfaces de ports, modèles de domaine
spi/          → Adaptateurs base de données (MongoDB Panache), clients REST inter-µServices
config/       → Configuration Quarkus (OpenAPI, hints de réflexion GraalVM)
utils/        → Classes utilitaires métier

Les ressources REST injectent uniquement l'interface du port métier (IXxxAppProvider). Le service métier injecte uniquement l'interface du port de données (IXxxRepository). Aucun couplage direct entre les couches.

Module communs

Bibliothèque partagée par tous les microservices, publiée sur GitHub Packages :

Package Rôle
api/AbstractAPIResource Base des ressources REST – endpoint /info
api/AbstractAPIInterceptors Intercepteurs de logging des requêtes/réponses
api/security/AbstractAPISecurityFilter Validation du JWT (issuer Google, signature JWKS)
utils/security/JWTUtils, SecurityUtils Parsing JWT, sanitisation des inputs
utils/exceptions/ Exceptions typées : DataNotFoundException, UserNotAuthorizedException, BudgetNotFoundException, CompteClosedException, BadParametersException
data/trace/BusinessTraceContext Contexte de trace MDC (effacé après chaque réponse)
aws-deploy/ Templates SAM et configuration API Gateway

Patterns clés

Reactive (Mutiny) – Toutes les méthodes de service et d'accès aux données retournent Uni<T> (valeur unique) ou Multi<T> (flux). Ne jamais bloquer avec .await().indefinitely() hors des tests.

Injection CDI – Uniquement @Inject et @ApplicationScoped. Pas d'annotations Spring.

Sécurité – Chaque µService surcharge AbstractAPISecurityFilter et déclare @RolesAllowed avec des constantes issues de son propre *APIEnum. Le rôle USER_OPERATIONS est défini dans OperationsAPIEnum.OPERATIONS_ROLE, etc.

Appels inter-µServices – Le µService operations appelle comptes et parametrages via des interfaces SPI (IComptesServiceProvider, IParametragesServiceProvider) implémentées par des clients REST MicroProfile.

Structure Maven multi-modules

gestion-budget-serverless/
├── pom.xml          ← parent (packaging: pom), Quarkus BOM 3.37.1, Java 25 (Mandrel 25 natif — [ADR-003](https://github.com/vzwingma/gestion-budget-serverless/blob/master/docs/adr/003-upgrade-java25-mandrel25.md))
├── communs/         ← bibliothèque commune → publiée sur GitHub Packages
├── parametrages/    ← µService /parametres/v2/
├── utilisateurs/    ← µService /utilisateurs/v2/
├── comptes/         ← µService /comptes/v2/
└── operations/      ← µService /budgets/v2/ et /budgets/v2/admin/

communs doit être buildé et publié en premier ; les autres modules en dépendent. C'est l'ordre reflété dans le CI (job build-communs → jobs build-quarkus-*).

Navigation

Clone this wiki locally