W jaki sposób ogarnąć czystość w kontrolerze? Posiadam taki kontroler
@PostMapping("/forgotUsername")
public ModelAndView recoverUsername(@ModelAttribute("forgotUsernameDTO") @Valid ForgotUsernameDTO forgotUsernameDTO,
BindingResult result,
ModelMap modelMap) {
if(result.hasErrors()) {
modelMap.addAttribute("error", true);
return new ModelAndView("forgotUsername");
}
Optional<User> userOptional = userService.findByEmail(forgotUsernameDTO.getEmail());
if(userOptional.isPresent()) {
User user = userOptional.get();
try {
JavaMailSenderImpl sender = new JavaMailSenderImpl();
MimeMessage message = sender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message);
helper.setTo(user.getEmail());
helper.setSubject("Recover username");
helper.setText("Your username: " + "<b>" + user.getUsername() + "</b>", true);
mailService.sendMail(message);
} catch (MessagingException e) {
e.printStackTrace();
}
}
modelMap.addAttribute("success", true);
return new ModelAndView("forgotUsername", modelMap);
}
który według mnie robi za dużo rzeczy. Chodzi mi o to, że tutaj np. jest bezpośrednie wysyłanie email. Może wypadałoby taką funkcję jak tworzenie wiadomości przenieść do jakiegoś specjalnie stworzonego do tego komponentu. Poradzicie coś?
Potrafię pisać ładne kontrolery
@GetMapping(value = "/getUsers", produces = MediaType.APPLICATION_JSON_VALUE)
public HttpEntity<List<User>> getUsers(
@RequestParam(required = false) String q,
@RequestParam(required = false, defaultValue = "1") int page,
@RequestParam(required = false, defaultValue = "1") int pageSize,
@RequestParam(required = false, defaultValue = "id") String sort
) {
return Optional
.ofNullable(q)
.map(v -> ResponseEntity.ok().body(userService.findByUsernameContaining(q, page - 1, pageSize, new Sort(Sort.Direction.ASC, sort))))
.orElseGet(() ->
ResponseEntity.ok().body(userService.findAll(page - 1, pageSize, new Sort(Sort.Direction.ASC, sort)))
);
}
ale te brzydkie niestety też.