MeetupController.java 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. package es.uv.garcosda.controllers;
  2. import es.uv.garcosda.domain.Meeting;
  3. import jakarta.validation.ConstraintViolation;
  4. import jakarta.validation.ConstraintViolationException;
  5. import jakarta.validation.constraints.NotEmpty;
  6. import jakarta.validation.constraints.NotNull;
  7. import java.time.LocalDateTime;
  8. import java.time.format.DateTimeFormatter;
  9. import java.util.ArrayList;
  10. import java.util.Arrays;
  11. import java.util.List;
  12. import java.util.Set;
  13. import java.util.stream.Collectors;
  14. import org.springframework.format.annotation.DateTimeFormat;
  15. import org.springframework.http.HttpStatus;
  16. import org.springframework.http.ResponseEntity;
  17. import org.springframework.stereotype.Controller;
  18. import org.springframework.ui.Model;
  19. import org.springframework.validation.annotation.Validated;
  20. import org.springframework.web.bind.annotation.ExceptionHandler;
  21. import org.springframework.web.bind.annotation.GetMapping;
  22. import org.springframework.web.bind.annotation.PathVariable;
  23. import org.springframework.web.bind.annotation.PostMapping;
  24. import org.springframework.web.bind.annotation.RequestParam;
  25. import org.springframework.web.bind.annotation.ResponseBody;
  26. import org.springframework.web.servlet.view.RedirectView;
  27. @Controller
  28. @Validated
  29. public class MeetupController {
  30. DateTimeFormatter format = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm");
  31. List<Meeting> meetings = new ArrayList<Meeting>(
  32. Arrays.asList(new Meeting("First meeting",
  33. LocalDateTime.parse("10/02/2023 10:00", format)),
  34. new Meeting("Second meeting",
  35. LocalDateTime.parse("12/02/2023 16:30", format)),
  36. new Meeting("Fourth meeting",
  37. LocalDateTime.parse("15/02/2023 13:00", format)),
  38. new Meeting("Fourth meeting",
  39. LocalDateTime.parse("01/03/2023 11:45", format))));
  40. @GetMapping("/")
  41. public String getMeetups(Model model) {
  42. model.addAttribute("meetings", this.meetings);
  43. return "index";
  44. }
  45. @PostMapping("/")
  46. public RedirectView addMeeting(Model model, @RequestParam("subject") @NotNull @NotEmpty String subject,
  47. @RequestParam("date") @NotNull @NotEmpty @DateTimeFormat(pattern="dd/MM/yyyy hh:MM") String date) {
  48. meetings.add(new Meeting(subject, LocalDateTime.parse(date, this.format)));
  49. model.addAttribute("meetings", this.meetings);
  50. return new RedirectView("/");
  51. }
  52. @GetMapping("/remove/{id}")
  53. public RedirectView removeMeeting(Model model, @PathVariable("id") String id) {
  54. this.meetings = this.meetings.stream().filter(x -> !x.getId().equals(id)).collect(Collectors.toList());
  55. return new RedirectView("/");
  56. }
  57. @ExceptionHandler(ConstraintViolationException.class)
  58. @ResponseBody
  59. public ResponseEntity<String> validationError(ConstraintViolationException ex) {
  60. Set<ConstraintViolation<?>> violations = ex.getConstraintViolations();
  61. String msg = "";
  62. for(ConstraintViolation<?> v : violations) {
  63. msg += v.getPropertyPath().toString() + " : " + v.getMessage() + ", ";
  64. }
  65. return new ResponseEntity<String>(msg, HttpStatus.BAD_REQUEST);
  66. }
  67. }