Skip to content

Rendu Projet Grimoire Club

ACKERMANN MATHIEU requested to merge mathieuackermann/A61:main into main

ACKERMANN Mathieu TD34 - Projet 2025 : Grimoire Club

Refactorisation et corrections du projet Grimoire Club

Résumé

Cette merge request comprend une série d'améliorations et de corrections visant à améliorer la qualité du code, la maintenabilité et la robustesse des tests du projet Grimoire Club. Les modifications clés incluent l'extraction de la logique de duel dans une classe dédiée, la correction de bugs dans la logique métier et l'amélioration de la couverture des tests.

Modifications principales

1. Extraction de la logique de duel

  • Création d'une classe DuelService dédiée à la gestion des duels entre sorciers
  • Implémentation du nouveau type de duel "mma" (mixed martial arts) pour comparer toutes les statistiques des sorciers
  • Déplacement de la logique métier depuis WizardClubService vers DuelService

2. Création de classes utilitaires

  • SpellUtils: Gestion de la sérialisation/désérialisation des sorts
  • SorcererMapper: Conversion entre les résultats de base de données et les objets métier

3. Amélioration des DTOs (Data Transfer Objects)

  • Création et mise à jour des classes DTO pour une meilleure séparation des responsabilités :
    • AddMemberDto
    • DuelRequestDto
    • BasicResponseDto
    • ClubResponseDto
    • SorcererDto

4. Correction de bugs critiques

  1. Bug dans la logique de duel basé sur la connaissance :
    • Correction d'une erreur dans getKnowledgeWinner() qui retournait incorrectement un gagnant au lieu d'un match nul lorsque les sorciers avaient la même puissance totale de sorts mais un nombre différent de sorts
    • Test ajouté pour vérifier ce scénario de match nul
  2. Problème de vérification dans les tests du contrôleur :
    • Correction du test shouldOrganizeDuel() pour éviter d'appeler deux fois fetchSorcerer(1) en utilisant des IDs différents pour les sorciers impliqués dans le duel

5. Amélioration de la documentation

  • Ajout et mise à jour de la documentation JavaDoc pour toutes les classes et méthodes publiques
  • Amélioration des commentaires dans le code pour faciliter la compréhension

6. Refactorisation du controller

  • Exposition de méthodes auxiliaires dans WizardClubController pour faciliter les tests
  • Utilisation cohérente des DTOs dans les endpoints REST

Tests

  • Création de tests unitaires complets pour les nouveaux services :
    • DuelServiceTest
    • SpellUtilsTest
    • SorcererMapperTest
  • Mise à jour des tests existants pour refléter les nouvelles structures de classes :
    • WizardClubServiceTest
    • WizardClubControllerTest
  • Ajout de tests d'intégration pour valider le fonctionnement de bout en bout

Impact technique

  1. Meilleure séparation des responsabilités : Extraction de la logique métier dans des classes dédiées
  2. Meilleures pratiques de code : Utilisation de design patterns appropriés (DTO, Mapper, Service)
  3. Robustesse accrue : Tests complets pour tous les scénarios, y compris les cas limites
  4. Maintenabilité améliorée : Code plus modulaire et documentation complète

Comment tester

  1. Exécutez la suite complète de tests avec mvn test
  2. Vérifiez en particulier les tests de duel pour vous assurer que tous les types de duel fonctionnent correctement
  3. Testez manuellement les endpoints REST avec les exemples de requêtes fournis dans la documentation

Merge request reports