Introduction
Structure du depot
Organisation du projet Place API - dossiers, modules et fichiers de configuration
Structure du depot
Vue d'ensemble de l'arborescence
Le projet suit une organisation modulaire avec separation claire entre l'hote API, les modules metier, et les blocs de construction partages.
place-api/
├── src/
│ ├── Api/ # Hote ASP.NET Core unique
│ ├── Modules/ # Modules metier
│ │ ├── Identity/ # Authentification & utilisateurs
│ │ ├── Audit/ # Journalisation d'audit
│ │ ├── Messaging/ # Email, SMS, Push
│ │ └── Booking/ # Module a venir
│ ├── BuildingBlocks/ # Bibliotheque partagee
│ ├── Aspire/ # Orchestration locale
│ └── Documentation/ # Ce site
├── build/ # Projet de build
├── Directory.Build.props # Proprietes de build
├── Directory.Packages.props # Versions NuGet centralisees
└── place-dotnet-api.slnx # Solution (.slnx)
Point d'entree : src/Api/
Un seul projet ASP.NET Core qui enregistre tous les modules.
| Fichier | Role |
|---|---|
Program.cs | Configure l'hote, enregistre les modules Identity / Audit / Messaging, ajoute les ServiceDefaults Aspire |
Module Identity
Le plus gros module, gerant l'authentification, les utilisateurs, les sessions et l'administration.
Structure interne
Identity/
├── Identity/ # Implementation (types internal)
│ ├── Constants/ # Permissions, endpoints, codes
│ ├── Entities/ # User, Role, UserSession...
│ ├── Events/ # UserLoggedInEvent...
│ ├── Errors/ # Erreurs specifiques
│ ├── Extensions/ # AddInfrastructure / UseInfrastructure
│ ├── Features/ # Vertical slices
│ ├── Infrastructure/ # JWT, sessions, OTP, rate limiting
│ ├── Persistence/ # DbContext, migrations, seeds
│ ├── Services/ # Interfaces des services
│ └── ValueObjects/ # UserId, Email, HashedToken...
├── Identity.Contracts/ # Interface publique (DTOs, events)
└── tests/
├── IntegrationTest/ # Testcontainers + Respawn
└── UnitTest/
Features Auth (vertical slices)
Chaque feature est une tranche complete : Command + Handler + Validator + Endpoint.
| Feature | Description |
|---|---|
Login/V1/ | Connexion email/mot de passe |
Register/V1/ | Inscription |
Logout/V1/ | Deconnexion |
RefreshToken/V1/ | Rotation de refresh token |
ForgotPassword/V1/ | Mot de passe oublie |
ResetPassword/V1/ | Reinitialisation de mot de passe |
ConfirmEmail/V1/ | Confirmation d'email |
ResendConfirmation/V1/ | Renvoi de confirmation |
ResendOtp/V1/ | Renvoi d'OTP |
VerifyOtp/V1/ | Verification d'OTP |
ChangePassword/V1/ | Changement de mot de passe |
SocialLogin/V1/ | Connexion sociale (Google, Facebook, Apple) |
LinkedAccounts/V1/ | Gestion des comptes lies |
Jwks/V1/ | Endpoint JWKS (cles publiques) |
Features Auth - Sous-domaines
| Sous-domaine | Features |
|---|---|
| TwoFactor | Login2Fa/V1/, TotpSetup/V1/, TotpVerify/V1/, TotpDisable/V1/, RegenerateRecoveryCodes/V1/ |
| Sessions | GetMySessions/V1/, RevokeSession/V1/, RevokeAllOtherSessions/V1/ |
| Security | GetSecuritySettings/V1/, UpdateSecuritySettings/V1/ |
| PushTokens | RegisterPushToken/V1/, UnregisterPushToken/V1/ |
Features Admin
| Feature | Description |
|---|---|
ActivateUser/V1/ | Activer un utilisateur |
DeactivateUser/V1/ | Desactiver un utilisateur |
AdminGetUserSessions/V1/ | Voir les sessions d'un utilisateur |
AdminRevokeSession/V1/ | Revoquer une session |
AdminRevokeAllUserSessions/V1/ | Revoquer toutes les sessions |
Module Audit
Journalisation des actions avec diffusion temps reel via SignalR.
Audit/
├── Audit/
│ ├── Entities/ # AuditLog
│ ├── Extensions/ # InfrastructureExtensions
│ ├── Features/
│ │ ├── Admin/ # 7 endpoints de consultation
│ │ └── ConsumeAuditEvent/ # Handler MediatR
│ ├── Hubs/ # AuditHub (SignalR)
│ ├── Persistence/ # AuditContext, migrations
│ └── Services/ # AuditLogWriter
└── tests/
└── UnitTest/
| Feature Admin | Description |
|---|---|
GetAuditLogs/V1/ | Liste paginee des logs |
GetAuditLogById/V1/ | Detail d'un log |
GetAuditLogsByCorrelation/V1/ | Logs par correlation ID |
GetAuditLogsByTrace/V1/ | Logs par trace ID |
GetAuditSummary/V1/ | Resume statistique |
GetExceptionAuditLogs/V1/ | Logs d'erreurs |
GetSecurityAuditLogs/V1/ | Logs de securite |
Module Messaging
Envoi d'emails, SMS et notifications push avec persistance.
Messaging/
├── Messaging/
│ ├── Behaviors/ # MessagingPersistenceBehavior
│ ├── Entities/ # SentMessage, MessageStatus
│ ├── Features/
│ │ ├── SendEmail/V1/
│ │ ├── SendSms/V1/
│ │ └── SendPush/V1/
│ ├── Infrastructure/
│ │ ├── Email/ # SMTP (SmtpEmailSender)
│ │ ├── Sms/ # AWS SNS (SnsSmsSender)
│ │ ├── Push/ # Push (stub)
│ │ └── Templates/ # MJML (MjmlTemplateRenderer)
│ ├── Jobs/ # MessageCleanupJob (retention 90j)
│ ├── Persistence/ # MessagingContext
│ └── Services/ # IEmailSender, ISmsSender, IPushSender
├── Messaging.Contracts/ # Commands, Events, Messages publics
└── tests/
BuildingBlocks
Bibliotheque partagee par tous les modules. Ne pas modifier sans approbation explicite.
| Package | Role |
|---|---|
Core/CQRS/ | ICommand<T>, IQuery<T>, ICommandHandler, IQueryHandler |
Core/Event/ | IDomainEvent, IIntegrationEvent, MessageEnvelope |
Core/Model/ | IEntity, Entity, Aggregate |
Core/Pagination/ | IPageList, IPageRequest, IPageQuery |
EFCore/ | AppDbContextBase, IDataSeeder, ISeedManager |
Auditing/ | Middleware, behavior et metriques d'audit |
BackgroundJobs/ | Integration Hangfire |
Caching/ | Behaviors de cache (EasyCaching) |
Exception/ | NotFoundException, BadRequestException, etc. |
Validation/ | ValidationBehavior (pipeline FluentValidation) |
Web/ | IMinimalEndpoint, EndpointConfig |
Aspire
Orchestration locale pour le developpement.
Aspire/src/
├── AppHost/Program.cs # PostgreSQL + Mailpit + API + Docs
└── ServiceDefaults/ # Extensions d'observabilite partagees
Fichiers de configuration racine
Directory.Build.props
Proprietes de build appliquees a tous les projets :
- Framework :
net10.0 - Nullable reference types activees
- Implicit usings activees
- Analyseurs configures comme erreurs (StyleCop, Roslynator, Meziantou, CSharpGuidelinesAnalyzer)
Directory.Packages.props
Central Package Management : toutes les versions NuGet sont centralisees ici. Les .csproj ne doivent jamais contenir d'attribut Version.
place-dotnet-api.slnx
Fichier solution au nouveau format XML (.slnx), remplacant l'ancien .sln.
.editorconfig
Regles de style appliquees par les analyseurs. Ne doit pas etre modifie pour supprimer des warnings — les corrections se font dans le code source.
.env.example
Variables d'environnement requises :
| Categorie | Variables |
|---|---|
| PostgreSQL | Connexions identity, audit, hangfire, persist-message |
| JWT | Cle privee RSA (Base64), issuer, audience |
| Auth sociale | Google, Facebook, Apple client IDs/secrets |
| AWS SNS | Region, access key, secret key |
| SMTP | Host, port, credentials |
docker-compose.yml / Dockerfile
Deploiement containerise avec Traefik (reverse proxy), PostgreSQL et l'API .NET.