Gestion des Tirages & Groupes - 0x485254/brief-26 GitHub Wiki

🎯 Gestion des Tirages & Groupes – Mohamed

📁 Arborescence & Fichiers à créer

backend/
└── src/
    ├── main/
    │   ├── java/com/easygroup/
    │   │   ├── controller/
    │   │   │   ├── DrawController.java
    │   │   │   └── GroupController.java
    │   │   ├── service/
    │   │   │   ├── DrawService.java
    │   │   │   └── GroupService.java
    │   │   ├── repository/
    │   │   │   ├── DrawRepository.java
    │   │   │   └── GroupRepository.java
    │   │   ├── entity/
    │   │   │   ├── Draw.java
    │   │   │   ├── Group.java
    │   │   │   └── GroupPerson.java
    │   │   ├── dto/
    │   │   │   ├── DrawRequest.java
    │   │   │   └── GroupDto.java
    │   │   └── exception/
    │   │       └── DrawNotAllowedException.java

📌 Fichiers & responsabilités globales

DrawController.java

Expose les endpoints pour créer et consulter les tirages.

GroupController.java

Gère les endpoints de consultation des groupes issus d’un tirage.

DrawService.java

Logique métier du tirage aléatoire, génération et validation.

GroupService.java

Règles de formation de groupes à partir d’une liste et d’un tirage.

DrawRepository.java

Accès aux tirages persistés.

GroupRepository.java

Accès aux groupes associés à un tirage.

Draw.java

Entité représentant un tirage effectué sur une liste (date, titre, FK liste).

Group.java

Entité représentant un groupe dans un tirage (nom, FK draw).

GroupPerson.java

Jointure entre les groupes et les personnes qui les composent.


🔧 Méthodes détaillées

DrawController

Méthode Rôle
createDraw(Long listId, DrawRequest request) Lance un nouveau tirage à partir d'une liste
getDrawsForList(Long listId) Liste les tirages passés pour une liste donnée

GroupController

Méthode Rôle
getGroupsByDraw(Long drawId) Retourne les groupes générés pour un tirage

DrawService

Méthode Rôle
createDraw(Long listId, DrawRequest request) Vérifie si un nouveau tirage est possible, génère les groupes, les enregistre
getDrawsByList(Long listId) Récupère l’historique des tirages pour une liste
isDrawAllowed(Long listId) Vérifie si la liste a suffisamment de diversité (âge, DWWM, etc.)

GroupService

Méthode Rôle
generateGroups(List<Person> persons, DrawRequest settings) Algorithme de regroupement équilibré selon les critères demandés
validateGroupUniqueness(List<Group>) Empêche la répétition exacte d’un tirage précédent
assignPersonsToGroups(...) Répartit les personnes dans des groupes et sauvegarde dans Group + GroupPerson

🧭 Diagramme de séquence – Création d’un tirage avec groupes

sequenceDiagram
    participant Frontend
    participant DrawController
    participant DrawService
    participant GroupService
    participant DrawRepository
    participant GroupRepository

    Frontend->>DrawController: POST /lists/{id}/draw
    DrawController->>DrawService: createDraw(listId, settings)
    DrawService->>DrawService: isDrawAllowed(listId)
    DrawService->>GroupService: generateGroups(persons, settings)
    GroupService->>GroupService: validateGroupUniqueness()
    GroupService->>GroupRepository: saveAll(groups)
    DrawService->>DrawRepository: save(draw)
    DrawController-->>Frontend: 201 Created + drawId
Loading

✅ Bonnes pratiques respectées

  • Règle métier encapsulée dans les services
  • Contrôleurs uniquement pour l’orchestration
  • DTO pour découpler la structure API / entités
  • Prévalidation métier (isDrawAllowed, validateGroupUniqueness)
  • Responsabilités clairement séparées (tirage ≠ regroupement ≠ affichage)
⚠️ **GitHub.com Fallback** ⚠️