# 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
