CategorieController.java 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. package fr.triplea.demovote.web.controller;
  2. import java.util.List;
  3. import java.util.Locale;
  4. import java.util.stream.Collectors;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.context.MessageSource;
  7. import org.springframework.http.ResponseEntity;
  8. import org.springframework.security.access.prepost.PreAuthorize;
  9. import org.springframework.security.core.Authentication;
  10. import org.springframework.transaction.annotation.Transactional;
  11. import org.springframework.web.bind.annotation.DeleteMapping;
  12. import org.springframework.web.bind.annotation.GetMapping;
  13. import org.springframework.web.bind.annotation.PathVariable;
  14. import org.springframework.web.bind.annotation.PostMapping;
  15. import org.springframework.web.bind.annotation.PutMapping;
  16. import org.springframework.web.bind.annotation.RequestBody;
  17. import org.springframework.web.bind.annotation.RequestMapping;
  18. import org.springframework.web.bind.annotation.RequestParam;
  19. import org.springframework.web.bind.annotation.RestController;
  20. import org.springframework.web.servlet.LocaleResolver;
  21. import fr.triplea.demovote.dao.BulletinRepository;
  22. import fr.triplea.demovote.dao.CategorieRepository;
  23. import fr.triplea.demovote.dao.ParticipantRepository;
  24. import fr.triplea.demovote.dto.MessagesTransfer;
  25. import fr.triplea.demovote.model.Categorie;
  26. import fr.triplea.demovote.model.Participant;
  27. import jakarta.servlet.http.HttpServletRequest;
  28. @RestController
  29. @RequestMapping("/categorie")
  30. public class CategorieController
  31. {
  32. private final BulletinRepository bulletinRepository;
  33. @Autowired
  34. private CategorieRepository categorieRepository;
  35. @Autowired
  36. private ParticipantRepository participantRepository;
  37. @Autowired
  38. private LocaleResolver localeResolver;
  39. @Autowired
  40. private MessageSource messageSource;
  41. CategorieController(BulletinRepository bulletinRepository) {
  42. this.bulletinRepository = bulletinRepository;
  43. }
  44. @GetMapping(value = "/list")
  45. @PreAuthorize("hasRole('USER')")
  46. public List<Categorie> getList(@RequestParam(required = false) Boolean admin, final Authentication authentication)
  47. {
  48. return categorieRepository.findAll(this.getNumeroUser(authentication), admin);
  49. }
  50. @GetMapping(value = "/form/{id}")
  51. @PreAuthorize("hasRole('ADMIN')")
  52. public ResponseEntity<Categorie> getForm(@PathVariable("id") int numeroCategorie)
  53. {
  54. Categorie c = categorieRepository.findById(numeroCategorie);
  55. if (c != null) { return ResponseEntity.ok(c); }
  56. return ResponseEntity.notFound().build();
  57. }
  58. @PostMapping(value = "/create")
  59. @PreAuthorize("hasRole('ADMIN')")
  60. public ResponseEntity<Object> create(@RequestBody(required = true) Categorie categorie, HttpServletRequest request)
  61. {
  62. Locale locale = localeResolver.resolveLocale(request);
  63. Categorie found = categorieRepository.findById(0);
  64. if (found == null) { categorie.setNumeroCategorie(null); }
  65. if (categorie.hasLibelle())
  66. {
  67. categorieRepository.saveAndFlush(categorie);
  68. MessagesTransfer mt = new MessagesTransfer();
  69. mt.setInformation(messageSource.getMessage("categorie.created", null, locale));
  70. return ResponseEntity.ok(mt);
  71. }
  72. return ResponseEntity.notFound().build();
  73. }
  74. @PutMapping(value = "/update/{id}")
  75. @PreAuthorize("hasRole('ADMIN')")
  76. public ResponseEntity<Object> update(@PathVariable("id") int numeroCategorie, @RequestBody(required = true) Categorie categorie, HttpServletRequest request)
  77. {
  78. Locale locale = localeResolver.resolveLocale(request);
  79. Categorie found = categorieRepository.findById(numeroCategorie);
  80. if (found != null)
  81. {
  82. found.setLibelle(categorie.getLibelle());
  83. found.setNumeroOrdre(categorie.getNumeroOrdre());
  84. found.setEnabled(true);
  85. found.setAvailable(categorie.isAvailable());
  86. found.setUploadable(categorie.isUploadable());
  87. found.setDisplayable(categorie.isDisplayable());
  88. found.setPollable(categorie.isPollable());
  89. found.setComputed(categorie.isComputed());
  90. categorieRepository.saveAndFlush(found);
  91. MessagesTransfer mt = new MessagesTransfer();
  92. mt.setInformation(messageSource.getMessage("categorie.updated", null, locale));
  93. return ResponseEntity.ok(mt);
  94. }
  95. return ResponseEntity.notFound().build();
  96. }
  97. @GetMapping(value = "/open-poll/{id}")
  98. @PreAuthorize("hasRole('ADMIN')")
  99. public ResponseEntity<Object> openPoll(@PathVariable("id") int numeroCategorie, HttpServletRequest request)
  100. {
  101. Locale locale = localeResolver.resolveLocale(request);
  102. Categorie c = categorieRepository.findById(numeroCategorie);
  103. if (c != null)
  104. {
  105. c.setPollable(true);
  106. categorieRepository.saveAndFlush(c);
  107. MessagesTransfer mt = new MessagesTransfer();
  108. mt.setAlerte(messageSource.getMessage("categorie.poll.opened", null, locale));
  109. return ResponseEntity.ok(mt);
  110. }
  111. return ResponseEntity.notFound().build();
  112. }
  113. @GetMapping(value = "/close-polls")
  114. @PreAuthorize("hasRole('ADMIN')")
  115. @Transactional
  116. public ResponseEntity<Object> closePolls(HttpServletRequest request)
  117. {
  118. Locale locale = localeResolver.resolveLocale(request);
  119. List<Categorie> categories = categorieRepository.findAll(0, true);
  120. if (categories != null)
  121. {
  122. if (categories.size() > 0)
  123. {
  124. bulletinRepository.cleanAll(); // supprime les enregistrements sans choix
  125. bulletinRepository.validateAll(); // validation automatique de tous les choix
  126. for (int i = 0; i < categories.size(); i++)
  127. {
  128. Categorie c = categories.get(i);
  129. c.setPollable(false);
  130. c.setComputed(true);
  131. categorieRepository.saveAndFlush(c);
  132. }
  133. MessagesTransfer mt = new MessagesTransfer();
  134. mt.setAlerte(messageSource.getMessage("categories.poll.closed", null, locale));
  135. return ResponseEntity.ok(mt);
  136. }
  137. }
  138. return ResponseEntity.notFound().build();
  139. }
  140. @GetMapping(value = "/show-results")
  141. @PreAuthorize("hasRole('ADMIN')")
  142. public ResponseEntity<Object> showResults(HttpServletRequest request)
  143. {
  144. Locale locale = localeResolver.resolveLocale(request);
  145. List<Categorie> categories = categorieRepository.findAll(0, true);
  146. if (categories != null)
  147. {
  148. if (categories.size() > 0)
  149. {
  150. for (int i = 0; i < categories.size(); i++)
  151. {
  152. Categorie c = categories.get(i);
  153. c.setDisplayable(true);
  154. categorieRepository.saveAndFlush(c);
  155. }
  156. MessagesTransfer mt = new MessagesTransfer();
  157. mt.setAlerte(messageSource.getMessage("categories.poll.displayed", null, locale));
  158. return ResponseEntity.ok(mt);
  159. }
  160. }
  161. return ResponseEntity.notFound().build();
  162. }
  163. @DeleteMapping(value = "/delete/{id}")
  164. @PreAuthorize("hasRole('ADMIN')")
  165. public ResponseEntity<Object> disableCategorie(@PathVariable("id") int numeroCategorie, HttpServletRequest request)
  166. {
  167. Locale locale = localeResolver.resolveLocale(request);
  168. Categorie c = categorieRepository.findById(numeroCategorie);
  169. if (c != null)
  170. {
  171. c.setEnabled(false);
  172. categorieRepository.saveAndFlush(c);
  173. MessagesTransfer mt = new MessagesTransfer();
  174. mt.setAlerte(messageSource.getMessage("categorie.deleted", null, locale));
  175. return ResponseEntity.ok(mt);
  176. }
  177. return ResponseEntity.notFound().build();
  178. }
  179. /** retourne 0 si ROLE_ADMIN, sinon c'est le numéro identifiant du participant USER */
  180. private final int getNumeroUser(Authentication auth)
  181. {
  182. int numeroParticipant = -1; // -1 pour non trouvé
  183. if (auth != null)
  184. {
  185. Participant found = participantRepository.findByPseudonyme(auth.getName());
  186. if (found != null)
  187. {
  188. numeroParticipant = found.getNumeroParticipant();
  189. List<String> roles = auth.getAuthorities().stream().map(r -> r.getAuthority()).collect(Collectors.toList());
  190. if (roles.contains("ROLE_ADMIN")) { numeroParticipant = 0; }
  191. }
  192. }
  193. return numeroParticipant;
  194. }
  195. }