|
| 1 | +# TableMasterApi — Contexte Claude Code |
| 2 | + |
| 3 | +Répondre en français. Limiter les changements strictement à la demande. |
| 4 | + |
| 5 | +## Vue d'ensemble |
| 6 | + |
| 7 | +API REST + temps réel pour la plateforme TableMaster (gestion de réservations de restaurants, salles, tables, menus, avis, notifications push). |
| 8 | + |
| 9 | +- **Stack** : ASP.NET Core API, **net10.0**, C# nullable activé. |
| 10 | +- **DB** : PostgreSQL via **Dapper** + **Npgsql**. |
| 11 | +- **Migrations** : **DbUp PostgreSQL**, scripts SQL embarqués dans `TableMasterApi/sql-scripts/` (préfixés par numéro de séquence, idempotents quand possible). |
| 12 | +- **Auth** : JWT Bearer, refresh tokens persistés. |
| 13 | +- **Temps réel** : SignalR (`ReservationHub` mappé sur `/reservationHub`). |
| 14 | +- **Notifications push** : Firebase Admin (FCM). |
| 15 | +- **Versioning API** : `Asp.Versioning.Mvc`, version par défaut `1.0`, header `x-api-version`. |
| 16 | +- **Doc** : Swagger en dev ou si `Features:EnableSwagger`. |
| 17 | +- **Tests** : xUnit, Moq, FluentAssertions. |
| 18 | + |
| 19 | +## Structure du repo |
| 20 | + |
| 21 | +``` |
| 22 | +TableMasterApi.sln |
| 23 | +TableMasterApi/ API |
| 24 | +├── Controllers/ endpoints HTTP versionnés (Auth, Reservation, Restaurant, Room, Table, Menu, Review, User, DailyActivity, ClosedDayException, DeviceToken) |
| 25 | +├── DAL/ accès données Dapper |
| 26 | +│ ├── Interfaces/ contrats mockables |
| 27 | +│ └── Handlers/ type handlers Dapper (ex: PostgresTimeSpanHandler) |
| 28 | +├── Model/ DTO, entités, configs |
| 29 | +├── Service/ JWT, FCM, Google Maps, DB connection, current user, health checks |
| 30 | +├── Hubs/ SignalR |
| 31 | +├── Middleware/ gestion transversale des erreurs |
| 32 | +├── sql-scripts/ migrations DbUp embarquées |
| 33 | +├── Program.cs bootstrap + DI |
| 34 | +├── Dockerfile |
| 35 | +└── docker-compose.yml |
| 36 | +TableMasterApi.Tests/ tests unitaires + intégration légère |
| 37 | +``` |
| 38 | + |
| 39 | +## Commandes |
| 40 | + |
| 41 | +Depuis la racine du repo : |
| 42 | + |
| 43 | +```bash |
| 44 | +dotnet restore |
| 45 | +dotnet build TableMasterApi.sln |
| 46 | +dotnet test |
| 47 | +bash run-tests.sh |
| 48 | +``` |
| 49 | + |
| 50 | +Depuis `TableMasterApi/` : |
| 51 | + |
| 52 | +```bash |
| 53 | +dotnet run |
| 54 | +docker compose up --build -d |
| 55 | +``` |
| 56 | + |
| 57 | +## Règles d'architecture |
| 58 | + |
| 59 | +- Controllers **minces** : pas de logique métier ni d'accès DB direct. |
| 60 | +- Accès données dans les **DAL**, logique réutilisable dans les **Services**. |
| 61 | +- Controllers dépendent des **interfaces DAL**, jamais des classes concrètes. |
| 62 | +- Dapper avec **paramètres nommés** uniquement, jamais de concaténation SQL. |
| 63 | +- Réutiliser `IDbConnectionFactory` / `PostgresConnectionFactory`. |
| 64 | +- `async`/`await` pour tout I/O (DB, services externes). |
| 65 | + |
| 66 | +## Ajouter une feature API |
| 67 | + |
| 68 | +1. Modèle dans `Model/`. |
| 69 | +2. Interface DAL dans `DAL/Interfaces/` + implémentation Dapper dans `DAL/`. |
| 70 | +3. Controller dans `Controllers/` (route `api/[controller]`, version API). |
| 71 | +4. Enregistrer DAL en `AddScoped` dans `Program.cs`. |
| 72 | +5. Migration SQL dans `sql-scripts/` avec préfixe numérique suivant la séquence. |
| 73 | +6. Tests xUnit ciblés. |
| 74 | +7. Si contrat exposé change : prévenir / mettre à jour le mobile. |
| 75 | + |
| 76 | +## Auth & sécurité |
| 77 | + |
| 78 | +- JWT centralisé dans `JwtService`. |
| 79 | +- Utilisateur courant via `ICurrentUserService`. |
| 80 | +- Refresh + persistance dans les DAL auth/user. |
| 81 | +- Health : `/health`, `/ready`. |
| 82 | +- **Ne jamais commiter** : `.env`, connection strings, user secrets, clé Firebase (`tablemaster-firebase.json`), secret JWT. |
| 83 | +- Ne pas éditer `bin/`, `obj/`, `.vs/` ni sorties générées. |
| 84 | + |
| 85 | +## Tests |
| 86 | + |
| 87 | +- Lancer `dotnet test` avant de terminer si possible. |
| 88 | +- Mocker via Moq, assertions via FluentAssertions. |
| 89 | +- Ajouter des tests autour de : auth, JWT, refresh token, controllers, DAL, services modifiés. |
| 90 | +- Pas de dépendance à un vrai service externe dans les tests. |
| 91 | + |
| 92 | +## Conventions C# |
| 93 | + |
| 94 | +- PascalCase : classes, propriétés, méthodes publiques. |
| 95 | +- camelCase : variables locales, paramètres. |
| 96 | +- Nullable activé : garder annotations + checks cohérents. |
| 97 | +- Réponses HTTP explicites, alignées sur les controllers existants. |
| 98 | +- Gérer les cas métier prévisibles ; laisser le middleware traiter l'inattendu. |
| 99 | + |
| 100 | +## Voir aussi |
| 101 | + |
| 102 | +- `AGENTS.md` — instructions étendues. |
| 103 | +- `README.md`, `CI_CD.md`, `POSTGRESQL_API_TESTS.md`, `TESTS-QUICK-START.md`. |
0 commit comments