# TetaRdPG — Brief Sprint 5 > Statut : en cours > Objectif : Audit API, corrections intégrité, features manquantes, équilibrage > Stack : NestJS · MySQL · TypeORM > Prérequis : Sprint 4 livré ✅ --- ## Plan Sprint 5 ### P0 — Exploits / Intégrité données - [ ] Race condition combat — transaction isolée pour endurance + character save - [ ] Race condition forge — transaction lock sur forgeLevel - [ ] Race condition craft — consumeMaterials atomique (transaction) - [ ] Race condition equip — transaction sur item equip/unequip - [ ] Forge gratuite — ajouter coût (or + endurance) ### P1 — Features manquantes (gameplay) - [ ] Endpoint distribution stat points (POST /api/characters/stats) - [ ] Endpoint recovery HP — auberge/repos (POST /api/characters/rest) - [ ] Item stat bonuses appliqués au combat (force_bonus, agilite_bonus, etc.) ### P2 — Indexes DB - [ ] character_id sur : character_items, character_materials, combat_logs, craft_jobs, player_achievements, community_contributions - [ ] equipped sur character_items - [ ] period sur hall_of_fame ### P3 — Cleanup - [ ] Supprimer @nestjs/jwt de package.json - [ ] Supprimer pg de package.json - [ ] Migrer seed.ts vers MySQL (AppDataSource) - [ ] ProcessedEvent TTL (cleanup > 90 jours) --- ## Critères de validation - [ ] 2 combats simultanés sur même perso → 1 seul passe, l'autre 409 - [ ] Forge déduit or + endurance - [ ] Forge sans or/endurance → 400 - [ ] Craft démarre en transaction atomique (matériaux non exploitables) - [ ] POST /api/characters/stats → distribue les points, valide total - [ ] POST /api/characters/rest → regen HP (coût endurance) - [ ] Combat applique item stat bonuses dans les calculs - [ ] Indexes créés (SHOW INDEX FROM) - [ ] @nestjs/jwt et pg absents de package.json