package com.astalange.web.controller; import com.astalange.core.entity.Adherent; import com.astalange.core.repository.PreInscriptionRepository; import com.astalange.core.service.PreInscriptionService; import jakarta.servlet.http.HttpServletResponse; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; import com.astalange.core.entity.PreInscription; import com.astalange.core.service.RelanceEmailService; @Controller @RequestMapping("/admin/pre-inscriptions") public class AdminPreInscriptionController { private final PreInscriptionRepository preInscriptionRepository; private final PreInscriptionService preInscriptionService; private final RelanceEmailService relanceEmailService; public AdminPreInscriptionController(PreInscriptionRepository preInscriptionRepository, PreInscriptionService preInscriptionService, RelanceEmailService relanceEmailService) { this.preInscriptionRepository = preInscriptionRepository; this.preInscriptionService = preInscriptionService; this.relanceEmailService = relanceEmailService; } @GetMapping public String listPreInscriptions(Model model) { model.addAttribute("preInscriptions", preInscriptionRepository.findByStatutTraiteFalseOrderByDateCreationDesc()); return "preinscriptions/list"; } @PostMapping("/{id}/valider") @ResponseBody public String valider(@PathVariable Long id, HttpServletResponse response) { Adherent adherent = preInscriptionService.validerPreInscription(id, null); response.setHeader("HX-Trigger", "refreshBadge"); // En HTMX, on renvoie une ligne vide pour la faire disparaître, ou on redirige via HX-Redirect // Mais comme on veut aller sur la page de l'adhérent pour finaliser la licence : response.setHeader("HX-Redirect", "/adherents/" + adherent.getId() + "/edit"); return ""; } @PostMapping("/{id}/rejeter") @ResponseBody public String rejeter(@PathVariable Long id, HttpServletResponse response) { preInscriptionService.rejeterPreInscription(id); response.setHeader("HX-Trigger", "refreshBadge"); return ""; // HTMX target la ligne avec outerHTML -> supprime la ligne } @PostMapping("/{id}/relancer") @ResponseBody public String relancer(@PathVariable Long id) { PreInscription pre = preInscriptionRepository.findById(id) .orElseThrow(() -> new IllegalArgumentException("Pré-inscription introuvable : " + id)); boolean sent = relanceEmailService.sendRelancePreInscription(pre); if (sent) { return " Relance envoyée"; } else { return "Erreur (sans email)"; } } @GetMapping("/count") @ResponseBody public String countBadge() { long count = preInscriptionRepository.countByStatutTraiteFalse(); if (count == 0) return ""; return "" + count + ""; } }