Gestion des Tirages & Groupes - 0x485254/brief-26 GitHub Wiki
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
Expose les endpoints pour créer et consulter les tirages.
Gère les endpoints de consultation des groupes issus d’un tirage.
Logique métier du tirage aléatoire, génération et validation.
Règles de formation de groupes à partir d’une liste et d’un tirage.
Accès aux tirages persistés.
Accès aux groupes associés à un tirage.
Entité représentant un tirage effectué sur une liste (date, titre, FK liste).
Entité représentant un groupe dans un tirage (nom, FK draw).
Jointure entre les groupes et les personnes qui les composent.
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 |
Méthode | Rôle |
---|---|
getGroupsByDraw(Long drawId) |
Retourne les groupes générés pour un tirage |
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.) |
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 |
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
- 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)