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.

FichierRole
Program.csConfigure 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.

FeatureDescription
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-domaineFeatures
TwoFactorLogin2Fa/V1/, TotpSetup/V1/, TotpVerify/V1/, TotpDisable/V1/, RegenerateRecoveryCodes/V1/
SessionsGetMySessions/V1/, RevokeSession/V1/, RevokeAllOtherSessions/V1/
SecurityGetSecuritySettings/V1/, UpdateSecuritySettings/V1/
PushTokensRegisterPushToken/V1/, UnregisterPushToken/V1/

Features Admin

FeatureDescription
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 AdminDescription
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.

PackageRole
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 :

CategorieVariables
PostgreSQLConnexions identity, audit, hangfire, persist-message
JWTCle privee RSA (Base64), issuer, audience
Auth socialeGoogle, Facebook, Apple client IDs/secrets
AWS SNSRegion, access key, secret key
SMTPHost, port, credentials

docker-compose.yml / Dockerfile

Deploiement containerise avec Traefik (reverse proxy), PostgreSQL et l'API .NET.