package com.astalange.web.controller; import com.astalange.core.entity.Equipement; import com.astalange.core.entity.Saison; import com.astalange.core.repository.EquipementRepository; import com.astalange.core.repository.SaisonRepository; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; @Controller @RequestMapping("/equipements") public class EquipementController { private final EquipementRepository equipementRepository; private final SaisonRepository saisonRepository; public EquipementController(EquipementRepository equipementRepository, SaisonRepository saisonRepository) { this.equipementRepository = equipementRepository; this.saisonRepository = saisonRepository; } @GetMapping public String listEquipements(Model model) { Saison activeSaison = saisonRepository.findByEstActiveTrue().orElse(null); if (activeSaison != null) { model.addAttribute("equipements", equipementRepository.findBySaison(activeSaison)); } else { model.addAttribute("equipements", java.util.List.of()); } return "parametrage/equipements_list"; } @GetMapping("/new") public String showCreateForm(Model model) { if (!model.containsAttribute("equipement")) { model.addAttribute("equipement", new Equipement()); } return "parametrage/equipements_form"; } @GetMapping("/{id}/edit") public String showEditForm(@PathVariable Long id, Model model) { if (!model.containsAttribute("equipement")) { Equipement equipement = equipementRepository.findById(id) .orElseThrow(() -> new IllegalArgumentException("Invalid equipment ID: " + id)); model.addAttribute("equipement", equipement); } return "parametrage/equipements_form"; } @PostMapping public String saveEquipement(@ModelAttribute("equipement") Equipement equipement, org.springframework.web.servlet.mvc.support.RedirectAttributes redirectAttributes) { Saison activeSaison; if (equipement.getId() == null) { activeSaison = saisonRepository.findByEstActiveTrue() .orElseThrow(() -> new IllegalStateException("Aucune saison active trouvée")); equipement.setSaison(activeSaison); } else { Equipement existing = equipementRepository.findById(equipement.getId()) .orElseThrow(() -> new IllegalArgumentException("Invalid equipment ID: " + equipement.getId())); equipement.setSaison(existing.getSaison()); activeSaison = existing.getSaison(); } if (activeSaison != null) { for (Equipement e : equipementRepository.findBySaison(activeSaison)) { if (e.getNom().equalsIgnoreCase(equipement.getNom()) && (equipement.getId() == null || !e.getId().equals(equipement.getId()))) { redirectAttributes.addFlashAttribute("errorMessage", "Erreur : L'équipement '" + equipement.getNom() + "' existe déjà pour cette saison."); redirectAttributes.addFlashAttribute("equipement", equipement); return equipement.getId() == null ? "redirect:/equipements/new" : "redirect:/equipements/" + equipement.getId() + "/edit"; } } } equipementRepository.save(equipement); return "redirect:/equipements"; } @PostMapping("/{id}/duplicate") public String duplicateEquipement(@PathVariable Long id) { Equipement existing = equipementRepository.findById(id) .orElseThrow(() -> new IllegalArgumentException("Invalid equipment ID: " + id)); Equipement duplicated = new Equipement(); String newNom = existing.getNom() + " (dupliqué)"; if (newNom.length() > 100) { newNom = newNom.substring(0, 100); } duplicated.setNom(newNom); duplicated.setReference(existing.getReference()); duplicated.setDescription(existing.getDescription()); duplicated.setGestionSexe(existing.isGestionSexe()); duplicated.setTypePublic(existing.getTypePublic()); duplicated.setTaillesDisponibles(existing.getTaillesDisponibles()); duplicated.setCouleursDisponibles(existing.getCouleursDisponibles()); duplicated.setHasFlocagePrenom(existing.isHasFlocagePrenom()); duplicated.setHasFlocageInitiales(existing.isHasFlocageInitiales()); duplicated.setHasFlocageNumero(existing.isHasFlocageNumero()); duplicated.setSaison(existing.getSaison()); equipementRepository.save(duplicated); return "redirect:/equipements"; } @PostMapping("/{id}/delete") public String deleteEquipement(@PathVariable Long id) { Equipement equipement = equipementRepository.findById(id) .orElseThrow(() -> new IllegalArgumentException("Invalid equipment ID: " + id)); equipementRepository.delete(equipement); return "redirect:/equipements"; } }