feat: gestion des utilisateurs, rôles et équipes

- Ajout de la section de gestion des utilisateurs avec rôles (Admin, Trésorerie, Agent de Saisie).
- Restriction des accès par rôle (Admin a tout, Trésorerie a adhérents/paiements, Agent de saisie a adhérents/planning).
- Flux de modification obligatoire de mot de passe temporaire au premier login (par défaut AsTalange123).
- Intégration de la configuration des équipes du club.
This commit is contained in:
2026-05-30 23:11:12 +02:00
parent 7e9504ffe0
commit 8a15139efb
29 changed files with 948 additions and 35 deletions
@@ -3,6 +3,7 @@ package com.astalange.web.controller;
import com.astalange.core.entity.*;
import com.astalange.core.repository.CategorieRepository;
import com.astalange.core.repository.CreneauEntrainementRepository;
import com.astalange.core.repository.EquipeRepository;
import com.astalange.core.repository.SaisonRepository;
import com.astalange.core.repository.TerrainRepository;
import org.springframework.stereotype.Controller;
@@ -21,15 +22,18 @@ public class PlanningController {
private final TerrainRepository terrainRepository;
private final CategorieRepository categorieRepository;
private final SaisonRepository saisonRepository;
private final EquipeRepository equipeRepository;
public PlanningController(CreneauEntrainementRepository creneauRepository,
TerrainRepository terrainRepository,
CategorieRepository categorieRepository,
SaisonRepository saisonRepository) {
SaisonRepository saisonRepository,
EquipeRepository equipeRepository) {
this.creneauRepository = creneauRepository;
this.terrainRepository = terrainRepository;
this.categorieRepository = categorieRepository;
this.saisonRepository = saisonRepository;
this.equipeRepository = equipeRepository;
}
@GetMapping
@@ -92,6 +96,7 @@ public class PlanningController {
model.addAttribute("terrains", terrainRepository.findAll());
model.addAttribute("zones", ZoneTerrain.values());
model.addAttribute("jours", JourSemaine.values());
model.addAttribute("equipes", List.of());
return "planning/form";
}
@@ -107,6 +112,12 @@ public class PlanningController {
model.addAttribute("zones", ZoneTerrain.values());
model.addAttribute("jours", JourSemaine.values());
if (creneau.getCategorie() != null) {
model.addAttribute("equipes", equipeRepository.findByCategorieId(creneau.getCategorie().getId()));
} else {
model.addAttribute("equipes", List.of());
}
return "planning/form";
}
@@ -122,6 +133,10 @@ public class PlanningController {
}
}
if (creneau.getEquipe() != null && creneau.getEquipe().getId() == null) {
creneau.setEquipe(null);
}
if (result.hasErrors()) {
Saison saison = creneau.getSaison();
if (saison == null) {
@@ -132,6 +147,11 @@ public class PlanningController {
model.addAttribute("terrains", terrainRepository.findAll());
model.addAttribute("zones", ZoneTerrain.values());
model.addAttribute("jours", JourSemaine.values());
if (creneau.getCategorie() != null && creneau.getCategorie().getId() != null) {
model.addAttribute("equipes", equipeRepository.findByCategorieId(creneau.getCategorie().getId()));
} else {
model.addAttribute("equipes", List.of());
}
return "planning/form";
}