From 4873abe8658cab3a80652daeb455909ac59228d0 Mon Sep 17 00:00:00 2001 From: Dede Date: Thu, 4 Dec 2025 12:21:53 +0000 Subject: [PATCH] splitting the services --- .../betengine/controller/AgentController.java | 14 ++++- .../betengine/controller/AuthController.java | 8 +++ .../controller/CourseController.java | 1 + .../controller/HippodromeController.java | 17 +++++- .../betengine/controller/MiseController.java | 2 +- .../controller/ResultatController.java | 11 ++++ .../controller/ReunionController.java | 15 +++++- .../java/com/pmu/betengine/model/Agent.java | 12 +++-- .../pmu/betengine/model/AuthRequestAgent.java | 9 ++++ .../com/pmu/betengine/model/Hippodrome.java | 7 ++- .../java/com/pmu/betengine/model/Reunion.java | 4 +- .../pmu/betengine/model/type/TypePari.java | 8 ++- .../betengine/repository/AgentRepository.java | 2 + .../repository/HippodromeRepository.java | 10 ++-- .../repository/ResultatRepository.java | 10 ++-- .../pmu/betengine/service/AgentService.java | 51 +++++++++++++++--- .../pmu/betengine/service/AuthService.java | 30 ++++++++--- .../betengine/service/HippodromeService.java | 22 ++++++++ .../betengine/service/ResultatService.java | 39 +++++++++++++- .../pmu/betengine/service/ReunionService.java | 54 +++++++++++++++---- 20 files changed, 280 insertions(+), 46 deletions(-) create mode 100644 src/main/java/com/pmu/betengine/model/AuthRequestAgent.java diff --git a/src/main/java/com/pmu/betengine/controller/AgentController.java b/src/main/java/com/pmu/betengine/controller/AgentController.java index 5e80c68..ef104bf 100644 --- a/src/main/java/com/pmu/betengine/controller/AgentController.java +++ b/src/main/java/com/pmu/betengine/controller/AgentController.java @@ -47,11 +47,23 @@ public class AgentController { } @DeleteMapping("/{id}") - @Operation(summary = "Supprimer un Agent") + @Operation(summary = "Désactiver un Agent") public ResponseEntity deleteAgent(@PathVariable Long id) { return ResponseEntity.ok(agentService.deleteAgent(id)); } + @PutMapping("/toggle-status/{id}") + @Operation(summary = "Activer ou désactiver un Agent") + public ResponseEntity toggleAgentStatus(@PathVariable Long id) { + return ResponseEntity.ok(agentService.toggleAgentStatus(id)); + } + + @PutMapping("/restore/{id}") + public ResponseEntity restoreAgent(@PathVariable Long id) { + return ResponseEntity.ok(agentService.restoreAgent(id)); + } + + @GetMapping("/code/{code}") @Operation(summary = "Obtenir un Agent par code") public ResponseEntity getAgentByCode(@PathVariable String code) { diff --git a/src/main/java/com/pmu/betengine/controller/AuthController.java b/src/main/java/com/pmu/betengine/controller/AuthController.java index 904e897..deaab31 100644 --- a/src/main/java/com/pmu/betengine/controller/AuthController.java +++ b/src/main/java/com/pmu/betengine/controller/AuthController.java @@ -1,6 +1,8 @@ package com.pmu.betengine.controller; +import com.pmu.betengine.model.Agent; import com.pmu.betengine.model.AuthRequest; +import com.pmu.betengine.model.AuthRequestAgent; import com.pmu.betengine.model.AuthResponse; import com.pmu.betengine.model.User; import com.pmu.betengine.service.AuthService; @@ -24,4 +26,10 @@ public class AuthController { return ResponseEntity.ok(loggedUser); } + // AGENT LOGIN via TPE + @PostMapping("/agent/login") + public ResponseEntity loginAgent(@RequestBody AuthRequestAgent request) { + Agent loggedAgent = authService.loginAgentWithPin(request); + return ResponseEntity.ok(loggedAgent); + } } diff --git a/src/main/java/com/pmu/betengine/controller/CourseController.java b/src/main/java/com/pmu/betengine/controller/CourseController.java index 97c433d..db6c1bb 100644 --- a/src/main/java/com/pmu/betengine/controller/CourseController.java +++ b/src/main/java/com/pmu/betengine/controller/CourseController.java @@ -99,5 +99,6 @@ public class CourseController { return ResponseEntity.ok(courseService.search(searchParam)); } + } diff --git a/src/main/java/com/pmu/betengine/controller/HippodromeController.java b/src/main/java/com/pmu/betengine/controller/HippodromeController.java index 0a36ffb..dbb29a0 100644 --- a/src/main/java/com/pmu/betengine/controller/HippodromeController.java +++ b/src/main/java/com/pmu/betengine/controller/HippodromeController.java @@ -46,13 +46,28 @@ public class HippodromeController { return ResponseEntity.ok(hippodromeService.updateHippodrome(id, hippodrome)); } - @DeleteMapping("/{id}") + @DeleteMapping("/delete/{id}") @Operation(summary = "Supprimer un Hippodrome") public ResponseEntity deleteHippodrome(@PathVariable Long id) { hippodromeService.deleteHippodrome(id); return ResponseEntity.noContent().build(); } + @PutMapping("/restore/{id}") + public ResponseEntity restoreHippodrome(@PathVariable Long id) { + return ResponseEntity.ok(hippodromeService.restoreHippodrome(id)); + } + + + @DeleteMapping("/{id}") + @Operation(summary = "Desactiver un Hippodrome") + public ResponseEntity deleteHippodrome2(@PathVariable Long id) { + hippodromeService.deleteHippodrome2(id); + return ResponseEntity.noContent().build(); + } + + + @GetMapping("/ville/{ville}") @Operation(summary = "Lister les Hippodromes par ville") public ResponseEntity> getHippodromesByVille(@PathVariable String ville) { diff --git a/src/main/java/com/pmu/betengine/controller/MiseController.java b/src/main/java/com/pmu/betengine/controller/MiseController.java index 972e5cb..6afb380 100644 --- a/src/main/java/com/pmu/betengine/controller/MiseController.java +++ b/src/main/java/com/pmu/betengine/controller/MiseController.java @@ -11,7 +11,7 @@ import org.springframework.web.bind.annotation.*; import java.util.List; @RestController -@RequestMapping("/api/v1/ ") +@RequestMapping("/api/v1") @CrossOrigin(origins = "*") @Tag(name = "Gestion des Mises", description = "Endpoints relatifs aux Mises") public class MiseController { diff --git a/src/main/java/com/pmu/betengine/controller/ResultatController.java b/src/main/java/com/pmu/betengine/controller/ResultatController.java index cb2a10d..e6f8cdc 100644 --- a/src/main/java/com/pmu/betengine/controller/ResultatController.java +++ b/src/main/java/com/pmu/betengine/controller/ResultatController.java @@ -3,8 +3,12 @@ package com.pmu.betengine.controller; import com.pmu.betengine.model.Cheval; import com.pmu.betengine.model.Course; import com.pmu.betengine.model.Resultat; +import com.pmu.betengine.model.SearchParam; import com.pmu.betengine.service.CourseService; import com.pmu.betengine.service.ResultatService; + +import io.swagger.v3.oas.annotations.Operation; + import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @@ -123,6 +127,13 @@ public ResponseEntity publishResultat(@RequestBody Resultat dto) { return ResponseEntity.ok(saved); } +@PostMapping("/searchByParams") +@Operation(summary = "Rechercher des résultats avec critères") +public ResponseEntity> searchResultats(@RequestBody SearchParam searchParam) { + return ResponseEntity.ok(resultatService.search(searchParam)); +} + + } diff --git a/src/main/java/com/pmu/betengine/controller/ReunionController.java b/src/main/java/com/pmu/betengine/controller/ReunionController.java index 3c84e8d..f8cfb6b 100644 --- a/src/main/java/com/pmu/betengine/controller/ReunionController.java +++ b/src/main/java/com/pmu/betengine/controller/ReunionController.java @@ -46,12 +46,25 @@ public class ReunionController { return ResponseEntity.ok(reunionService.updateReunion(id, reunion)); } + // @DeleteMapping("/{id}") + // @Operation(summary = "Supprimer une Réunion") + // public ResponseEntity deleteReunion(@PathVariable Long id) { + // return ResponseEntity.ok(reunionService.deleteReunion(id)); + // } + @DeleteMapping("/{id}") - @Operation(summary = "Supprimer une Réunion") + @Operation(summary = "Désactiver une Réunion") public ResponseEntity deleteReunion(@PathVariable Long id) { return ResponseEntity.ok(reunionService.deleteReunion(id)); } + @PutMapping("/restore/{id}") + @Operation(summary = "Restaurer une Réunion désactivée") + public ResponseEntity restoreReunion(@PathVariable Long id) { + return ResponseEntity.ok(reunionService.restoreReunion(id)); + } + + @GetMapping("/code/{code}") @Operation(summary = "Obtenir une Réunion par code") public ResponseEntity getReunionByCode(@PathVariable String code) { diff --git a/src/main/java/com/pmu/betengine/model/Agent.java b/src/main/java/com/pmu/betengine/model/Agent.java index 398950e..e39d416 100644 --- a/src/main/java/com/pmu/betengine/model/Agent.java +++ b/src/main/java/com/pmu/betengine/model/Agent.java @@ -33,7 +33,10 @@ public class Agent { private String profile; private String principalCode; private String caisseProfile; - private String statut; + + @Enumerated(EnumType.STRING) + private StatutAgent statut = StatutAgent.ACTIF; + private String zone; private String kiosk; private String fonction; @@ -41,6 +44,10 @@ public class Agent { @Column(name = "date_embauche") private LocalDateTime dateEmbauche; + @Column(name = "derniere_connexion") + private LocalDateTime derniereConnexion; + + private String nom; private String prenom; private String autresNoms; @@ -62,14 +69,11 @@ public class Agent { private Double limiteMaxAirtime; private Integer maxPeripheriques; - @OneToMany(mappedBy = "agent") @JsonIgnore private List tpes; - @Column(name = "limit_id") private Long limitId; - private String nationalite; private String cni; diff --git a/src/main/java/com/pmu/betengine/model/AuthRequestAgent.java b/src/main/java/com/pmu/betengine/model/AuthRequestAgent.java new file mode 100644 index 0000000..faab0b0 --- /dev/null +++ b/src/main/java/com/pmu/betengine/model/AuthRequestAgent.java @@ -0,0 +1,9 @@ +package com.pmu.betengine.model; + +public class AuthRequestAgent { + private String pin; + + // Getter and Setter + public String getPin() { return pin; } + public void setPin(String pin) { this.pin = pin; } +} diff --git a/src/main/java/com/pmu/betengine/model/Hippodrome.java b/src/main/java/com/pmu/betengine/model/Hippodrome.java index b780287..0b22ca9 100644 --- a/src/main/java/com/pmu/betengine/model/Hippodrome.java +++ b/src/main/java/com/pmu/betengine/model/Hippodrome.java @@ -33,11 +33,14 @@ public class Hippodrome { private String description; - @Column(name = "created_at") + @CreationTimestamp + @Column(name = "created_at", updatable = false) private LocalDateTime createdAt; - + + @UpdateTimestamp @Column(name = "updated_at") private LocalDateTime updatedAt; + } // @Table(name = "hippodrome") diff --git a/src/main/java/com/pmu/betengine/model/Reunion.java b/src/main/java/com/pmu/betengine/model/Reunion.java index a7c580c..25b43df 100644 --- a/src/main/java/com/pmu/betengine/model/Reunion.java +++ b/src/main/java/com/pmu/betengine/model/Reunion.java @@ -33,7 +33,9 @@ public class Reunion { private Integer numero; - private String statut; + @Column(name = "statut", nullable = false) + @Builder.Default + private String statut = "ACTIF"; @Column(name = "hippodrome_id") private Long hippodromeId; diff --git a/src/main/java/com/pmu/betengine/model/type/TypePari.java b/src/main/java/com/pmu/betengine/model/type/TypePari.java index 0ff1258..a7d508a 100644 --- a/src/main/java/com/pmu/betengine/model/type/TypePari.java +++ b/src/main/java/com/pmu/betengine/model/type/TypePari.java @@ -10,5 +10,11 @@ public enum TypePari { QUATRO, QUARTE_PLUS, MULTI, - QUINTE_PLUS + QUINTE_PLUS, + + TIERCE, + QUARTE, + QUINTE, + COUPLE_GAGNANT, + COUPLE_PLACE } diff --git a/src/main/java/com/pmu/betengine/repository/AgentRepository.java b/src/main/java/com/pmu/betengine/repository/AgentRepository.java index 457b019..6c549a7 100644 --- a/src/main/java/com/pmu/betengine/repository/AgentRepository.java +++ b/src/main/java/com/pmu/betengine/repository/AgentRepository.java @@ -12,6 +12,8 @@ public interface AgentRepository extends JpaRepository { Optional findByCode(String code); + Optional findByPin(String pin); + boolean existsByCode(String code); List findByStatut(String statut); diff --git a/src/main/java/com/pmu/betengine/repository/HippodromeRepository.java b/src/main/java/com/pmu/betengine/repository/HippodromeRepository.java index ad35350..b3e49fe 100644 --- a/src/main/java/com/pmu/betengine/repository/HippodromeRepository.java +++ b/src/main/java/com/pmu/betengine/repository/HippodromeRepository.java @@ -10,12 +10,14 @@ import java.util.List; public interface HippodromeRepository extends JpaRepository { boolean existsByNom(String nom); - List findByVille(String ville); - List findByPays(String pays); - List findByActif(boolean actif); - List findByNomContainingIgnoreCase(String nom); + + + List findByActifTrue(); + List findByVilleAndActifTrue(String ville); + List findByPaysAndActifTrue(String pays); + List findByNomContainingIgnoreCaseAndActifTrue(String nom); } diff --git a/src/main/java/com/pmu/betengine/repository/ResultatRepository.java b/src/main/java/com/pmu/betengine/repository/ResultatRepository.java index 61658f9..1e45221 100644 --- a/src/main/java/com/pmu/betengine/repository/ResultatRepository.java +++ b/src/main/java/com/pmu/betengine/repository/ResultatRepository.java @@ -8,24 +8,24 @@ import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; +import java.time.LocalDateTime; +import java.util.List; import java.util.Optional; @Repository public interface ResultatRepository extends JpaRepository { - Optional findByCourseId(Long courseId); - @Query("SELECT r FROM Resultat r WHERE r.course.id = :courseId") Optional findByCourse(@Param("courseId") Long courseId); - boolean existsByCourseId(Long courseId); - @Modifying @Transactional @Query("DELETE FROM Resultat r WHERE r.course.id = :courseId") void deleteByCourseId(@Param("courseId") Long courseId); -} + @Query("SELECT r FROM Resultat r WHERE r.course.dateDebutParis >= :start AND r.course.dateDebutParis < :end") + List findByCourseDate(@Param("start") LocalDateTime start, @Param("end") LocalDateTime end); +} // package com.pmu.betengine.repository; diff --git a/src/main/java/com/pmu/betengine/service/AgentService.java b/src/main/java/com/pmu/betengine/service/AgentService.java index 65462dc..3dfe6a8 100644 --- a/src/main/java/com/pmu/betengine/service/AgentService.java +++ b/src/main/java/com/pmu/betengine/service/AgentService.java @@ -1,6 +1,7 @@ package com.pmu.betengine.service; import com.pmu.betengine.model.Agent; +import com.pmu.betengine.model.statut.StatutAgent; import com.pmu.betengine.repository.AgentRepository; import org.springframework.stereotype.Service; @@ -27,7 +28,8 @@ public class AgentService { // Get all public List getAllAgents() { - return agentRepository.findAll(); + // return agentRepository.findAll(); + return agentRepository.findByStatut(StatutAgent.ACTIF.name()); } // Get by ID @@ -81,14 +83,35 @@ public class AgentService { } // Delete - public String deleteAgent(Long id) { - if (!agentRepository.existsById(id)) { - throw new RuntimeException("Agent non trouvé avec l'id: " + id); - } - agentRepository.deleteById(id); - return "Agent avec l'ID " + id + " supprimé avec succès."; + public String deleteAgent(Long id) { + Agent agent = getAgentById(id); + + if (agent.getStatut() == StatutAgent.INACTIF) { + throw new RuntimeException("Cet agent est déjà désactivé."); } + agent.setStatut(StatutAgent.INACTIF); + agent.setUpdatedAt(LocalDateTime.now()); + + agentRepository.save(agent); + + return "Agent désactivé avec succès (soft delete)."; +} + +public Agent restoreAgent(Long id) { + Agent agent = getAgentById(id); + + if (agent.getStatut() == StatutAgent.ACTIF) { + throw new RuntimeException("Cet agent est déjà actif."); + } + + agent.setStatut(StatutAgent.ACTIF); + agent.setUpdatedAt(LocalDateTime.now()); + + return agentRepository.save(agent); +} + + // Find by code public Agent getAgentByCode(String code) { return agentRepository.findByCode(code) @@ -100,6 +123,20 @@ public class AgentService { return agentRepository.findByStatut(statut); } + public Agent toggleAgentStatus(Long id) { + Agent agent = getAgentById(id); + + if (agent.getStatut() == StatutAgent.ACTIF) { + agent.setStatut(StatutAgent.INACTIF); + } else { + agent.setStatut(StatutAgent.ACTIF); + } + + agent.setUpdatedAt(LocalDateTime.now()); + return agentRepository.save(agent); + } + + // Find by ville public List getAgentsByVille(String ville) { return agentRepository.findByVille(ville); diff --git a/src/main/java/com/pmu/betengine/service/AuthService.java b/src/main/java/com/pmu/betengine/service/AuthService.java index 5f7ac2e..23ac3c5 100644 --- a/src/main/java/com/pmu/betengine/service/AuthService.java +++ b/src/main/java/com/pmu/betengine/service/AuthService.java @@ -1,9 +1,11 @@ package com.pmu.betengine.service; import com.pmu.betengine.model.AuthRequest; -import com.pmu.betengine.model.AuthResponse; +import com.pmu.betengine.model.AuthRequestAgent; import com.pmu.betengine.model.User; +import com.pmu.betengine.model.Agent; import com.pmu.betengine.repository.UserRepository; +import com.pmu.betengine.repository.AgentRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.crypto.password.PasswordEncoder; @@ -15,26 +17,38 @@ import java.time.LocalDateTime; public class AuthService { private final UserRepository userRepository; + private final AgentRepository agentRepository; + @Autowired private PasswordEncoder passwordEncoder; - public AuthService(UserRepository userRepository) { + public AuthService(UserRepository userRepository, AgentRepository agentRepository) { this.userRepository = userRepository; + this.agentRepository = agentRepository; } - - - + // USER LOGIN public User login(AuthRequest request) { User user = userRepository.findByIdentifiant(request.getIdentifiant()) .orElseThrow(() -> new RuntimeException("User not found")); - + if (!passwordEncoder.matches(request.getPassword(), user.getPassword())) { throw new RuntimeException("Invalid credentials"); } - + user.setDerniereConnexion(LocalDateTime.now()); - return userRepository.save(user); + return userRepository.save(user); + } + + // AGENT ALR LOGIN + public Agent loginAgentWithPin(AuthRequestAgent request) { + Agent agent = agentRepository.findByPin(request.getPin()) + .orElseThrow(() -> new RuntimeException("Invalid PIN")); + + agent.setDerniereConnexion(LocalDateTime.now()); + agentRepository.save(agent); + + return agent; } } diff --git a/src/main/java/com/pmu/betengine/service/HippodromeService.java b/src/main/java/com/pmu/betengine/service/HippodromeService.java index 90c3f96..076cf4d 100644 --- a/src/main/java/com/pmu/betengine/service/HippodromeService.java +++ b/src/main/java/com/pmu/betengine/service/HippodromeService.java @@ -59,6 +59,28 @@ public class HippodromeService { hippodromeRepository.deleteById(id); } + public void deleteHippodrome2(Long id) { + Hippodrome hippodrome = hippodromeRepository.findById(id) + .orElseThrow(() -> new RuntimeException("Hippodrome non trouvé")); + + hippodrome.setActif(false); + hippodromeRepository.save(hippodrome); + } + + public Hippodrome restoreHippodrome(Long id) { + Hippodrome hippodrome = hippodromeRepository.findById(id) + .orElseThrow(() -> new RuntimeException("Hippodrome non trouvé")); + + if (hippodrome.getActif()) { + throw new RuntimeException("Hippodrome est déjà actif"); + } + + hippodrome.setActif(true); + return hippodromeRepository.save(hippodrome); + } + + + // Search by ville public List getHippodromesByVille(String ville) { return hippodromeRepository.findByVille(ville); diff --git a/src/main/java/com/pmu/betengine/service/ResultatService.java b/src/main/java/com/pmu/betengine/service/ResultatService.java index 262d57a..e305a24 100644 --- a/src/main/java/com/pmu/betengine/service/ResultatService.java +++ b/src/main/java/com/pmu/betengine/service/ResultatService.java @@ -2,6 +2,7 @@ package com.pmu.betengine.service; import com.pmu.betengine.model.Course; import com.pmu.betengine.model.Resultat; +import com.pmu.betengine.model.SearchParam; import com.pmu.betengine.repository.ResultatRepository; import lombok.RequiredArgsConstructor; @@ -12,7 +13,8 @@ import org.springframework.web.bind.annotation.PathVariable; import java.util.Optional; import java.util.Map; - +import java.time.LocalDate; +import java.time.LocalDateTime; import java.util.HashMap; import java.util.List; @@ -68,6 +70,41 @@ public class ResultatService { return savedResultat; } + public List search(SearchParam searchParam) { + System.out.println("******************** SEARCH PARAM: " + searchParam); + + if (searchParam.getCriteria() == null) { + throw new IllegalArgumentException("Le paramètre 'criteria' est obligatoire et ne peut pas être null"); + } + + try { + String criteria = searchParam.getCriteria(); + + if ("1".equals(criteria)) { + // Retourne tous les résultats + return resultatRepository.findAll(); + } else if ("2".equals(criteria) && searchParam.getDate() != null) { + LocalDate date = searchParam.getDate(); + LocalDateTime startOfDay = date.atStartOfDay(); + LocalDateTime endOfDay = startOfDay.plusDays(1); + + return resultatRepository.findByCourseDate(startOfDay, endOfDay); + } else if ("3".equals(criteria) && searchParam.getId() != null) { + return resultatRepository.findByCourseId(searchParam.getId()) + .map(List::of) + .orElse(List.of()); + } + + // Cas par défaut + return resultatRepository.findAll(); + + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException("Erreur lors de la recherche des résultats"); + } +} + + } diff --git a/src/main/java/com/pmu/betengine/service/ReunionService.java b/src/main/java/com/pmu/betengine/service/ReunionService.java index 0870743..c3bedd5 100644 --- a/src/main/java/com/pmu/betengine/service/ReunionService.java +++ b/src/main/java/com/pmu/betengine/service/ReunionService.java @@ -37,10 +37,46 @@ public class ReunionService { // Get all - public List getAllReunions() { - return reunionRepository.findAll(); + // public List getAllReunions() { + // return reunionRepository.findAll(); + // } + // Soft delete +public String deleteReunion(Long id) { + Reunion reunion = getReunionById(id); + + if ("INACTIF".equals(reunion.getStatut())) { + throw new RuntimeException("Cette réunion est déjà désactivée."); } + reunion.setStatut("INACTIF"); + reunion.setUpdatedAt(LocalDateTime.now()); + reunionRepository.save(reunion); + + return "Réunion désactivée avec succès."; +} + +// Optional: restore +public Reunion restoreReunion(Long id) { + Reunion reunion = getReunionById(id); + + if ("ACTIF".equals(reunion.getStatut())) { + throw new RuntimeException("Cette réunion est déjà active."); + } + + reunion.setStatut("ACTIF"); + reunion.setUpdatedAt(LocalDateTime.now()); + return reunionRepository.save(reunion); +} + +// Override getAll to return only active reunions +public List getAllReunions() { + return reunionRepository.findAll() + .stream() + .filter(r -> "ACTIF".equals(r.getStatut())) + .toList(); +} + + // Get by ID public Reunion getReunionById(Long id) { return reunionRepository.findById(id) @@ -62,13 +98,13 @@ public class ReunionService { } // Delete - public String deleteReunion(Long id) { - if (!reunionRepository.existsById(id)) { - throw new RuntimeException("Réunion non trouvée avec l'id: " + id); - } - reunionRepository.deleteById(id); - return "Réunion avec l'ID " + id + " supprimée avec succès."; - } + // public String deleteReunion(Long id) { + // if (!reunionRepository.existsById(id)) { + // throw new RuntimeException("Réunion non trouvée avec l'id: " + id); + // } + // reunionRepository.deleteById(id); + // return "Réunion avec l'ID " + id + " supprimée avec succès."; + // } // Find by code public Reunion getReunionByCode(String code) {