Architecture¶
Le projet suit une architecture en couches avec dependances dirigees vers le domaine.
Vue d'ensemble¶
graph TD
FE[Frontend Blazor WASM] --> API[API ASP.NET Core]
API --> APP[Application Services]
APP --> DOM[Domaine\nEntities, Value Objects, Exceptions]
INF[Infrastructure\nEF Core, Repositories, Services] -. implemente .-> DOM
INF -. implemente les interfaces .-> APP
INF --> DB[(PostgreSQL)]
Projets¶
AdvancedDevSample.Api: composition racine, auth, middlewares, controllers, sante, metriquesAdvancedDevSample.Application: services d'orchestration, DTOs, validation mot de passeAdvancedDevSampleDomain: modeles metier, value objects, exceptions, interfaces repositoryAdvancedDevSample.Infrastructure: EF Core, repositories, mapping, JWT, password hashing, seedersAdvancedDevSample.Frontend: pages Blazor, services auth/API, gestion de sessionAdvancedDevSample.Test: tests domaine, application, integration API/persistence, frontend
Pipeline HTTP API¶
Ordre principal:
UseSentryTracingUseSwagger+ Scalar (Development)UseHttpsRedirectionUseCors("Frontend")ExceptionHandlingMiddlewareSecurityHeadersMiddlewareUseAuthenticationUseAuthorizationUseRateLimiterMapPrometheusScrapingEndpoint("/metrics")MapHealthChecks("/health/live", "/health/ready")MapControllers
Flux metier typiques¶
Creation produit¶
POST /api/productsProductsController->ProductService.CreateAsync- verification metier (SKU, categorie, prix)
- sauvegarde via
IProductRepository - reponse
201avecProductResponse
Login + refresh¶
POST /api/auth/login- verification credentials + utilisateur actif
- generation JWT + refresh token
- revocation des anciens refresh tokens utilisateur
POST /api/auth/refresheffectue une rotation de refresh token
Gestion des erreurs¶
ExceptionHandlingMiddleware mappe les exceptions vers des statuts HTTP coherents:
DomainException->400InvalidCredentialsException->401UserAlreadyExistsException->409ApplicationServiceException-> statut porte par l'exceptionInfrastructureException->500- exception inattendue ->
500