Files
TetaRdPG/SPRINT5.md
Tetardtek 6df11f2860
All checks were successful
CI/CD — Build & Deploy / Build & Deploy (push) Successful in 35s
feat(sprint5): audit fixes — transactions, indexes, stat distribution, rest, forge cost
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.
2026-03-24 15:55:50 +01:00

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