All checks were successful
CI/CD — Build & Deploy / Build & Deploy (push) Successful in 35s
P0 — Race conditions fixées avec pessimistic_write transactions : combat (double-spend endurance), forge (double upgrade), craft (consumeMaterials atomique), equip (item swap). Forge : coût or (50-1000) + endurance (15) ajouté. Combat : item stat bonuses (force/agilite/intelligence/chance) appliqués. P1 — Features manquantes : POST /api/characters/stats — distribution stat points (avec lock). POST /api/characters/rest — repos auberge (+50% HP, -20 endurance). Vitalité : +10 HP max par point distribué. P2 — Indexes DB ajoutés : character_id sur character_items, character_materials, combat_logs, craft_jobs, player_achievements, community_contributions. Composite (characterId, materialId) sur character_materials. period sur hall_of_fame. achievement_id sur player_achievements. P3 — Cleanup : @nestjs/jwt et pg retirés de package.json.
1.8 KiB
1.8 KiB
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