Répondre en français. Limiter les changements strictement à la demande.
API REST + temps réel pour la plateforme TableMaster (gestion de réservations de restaurants, salles, tables, menus, avis, notifications push).
- Stack : ASP.NET Core API, net10.0, C# nullable activé.
- DB : PostgreSQL via Dapper + Npgsql.
- Migrations : DbUp PostgreSQL, scripts SQL embarqués dans
TableMasterApi/sql-scripts/(préfixés par numéro de séquence, idempotents quand possible). - Auth : JWT Bearer, refresh tokens persistés.
- Temps réel : SignalR (
ReservationHubmappé sur/reservationHub). - Notifications push : Firebase Admin (FCM).
- Versioning API :
Asp.Versioning.Mvc, version par défaut1.0, headerx-api-version. - Doc : Swagger en dev ou si
Features:EnableSwagger. - Tests : xUnit, Moq, FluentAssertions.
TableMasterApi.sln
TableMasterApi/ API
├── Controllers/ endpoints HTTP versionnés (Auth, Reservation, Restaurant, Room, Table, Menu, Review, User, DailyActivity, ClosedDayException, DeviceToken)
├── DAL/ accès données Dapper
│ ├── Interfaces/ contrats mockables
│ └── Handlers/ type handlers Dapper (ex: PostgresTimeSpanHandler)
├── Model/ DTO, entités, configs
├── Service/ JWT, FCM, Google Maps, DB connection, current user, health checks
├── Hubs/ SignalR
├── Middleware/ gestion transversale des erreurs
├── sql-scripts/ migrations DbUp embarquées
├── Program.cs bootstrap + DI
├── Dockerfile
└── docker-compose.yml
TableMasterApi.Tests/ tests unitaires + intégration légère
Depuis la racine du repo :
dotnet restore
dotnet build TableMasterApi.sln
dotnet test
bash run-tests.shDepuis TableMasterApi/ :
dotnet run
docker compose up --build -d- Controllers minces : pas de logique métier ni d'accès DB direct.
- Accès données dans les DAL, logique réutilisable dans les Services.
- Controllers dépendent des interfaces DAL, jamais des classes concrètes.
- Dapper avec paramètres nommés uniquement, jamais de concaténation SQL.
- Réutiliser
IDbConnectionFactory/PostgresConnectionFactory. async/awaitpour tout I/O (DB, services externes).
- Modèle dans
Model/. - Interface DAL dans
DAL/Interfaces/+ implémentation Dapper dansDAL/. - Controller dans
Controllers/(routeapi/[controller], version API). - Enregistrer DAL en
AddScopeddansProgram.cs. - Migration SQL dans
sql-scripts/avec préfixe numérique suivant la séquence. - Tests xUnit ciblés.
- Si contrat exposé change : prévenir / mettre à jour le mobile.
- JWT centralisé dans
JwtService. - Utilisateur courant via
ICurrentUserService. - Refresh + persistance dans les DAL auth/user.
- Health :
/health,/ready. - Ne jamais commiter :
.env, connection strings, user secrets, clé Firebase (tablemaster-firebase.json), secret JWT. - Ne pas éditer
bin/,obj/,.vs/ni sorties générées.
- Lancer
dotnet testavant de terminer si possible. - Mocker via Moq, assertions via FluentAssertions.
- Ajouter des tests autour de : auth, JWT, refresh token, controllers, DAL, services modifiés.
- Pas de dépendance à un vrai service externe dans les tests.
- PascalCase : classes, propriétés, méthodes publiques.
- camelCase : variables locales, paramètres.
- Nullable activé : garder annotations + checks cohérents.
- Réponses HTTP explicites, alignées sur les controllers existants.
- Gérer les cas métier prévisibles ; laisser le middleware traiter l'inattendu.
AGENTS.md— instructions étendues.README.md,CI_CD.md,POSTGRESQL_API_TESTS.md,TESTS-QUICK-START.md.