Nessa aula foi sugerido a utilização de Optional para casos em que o dado não foi encontrado no BD.
Todavia, e especificamente para o método atualizar, com a utilização do findById no Controller, perde-se o sentido de transportar o id e o topicoRepository para o form e realizar a busca via getOne para posterior atualização, já que, se o findByID no Controller retornar o dado basta eu passar apenas o Topico para o Form e fazer a atualização dos dados ali, sem ir novamente no BD.
Aula:
@PutMapping("/{id}")
@Transactional
public ResponseEntity<TopicoDto> atualizar(@PathVariable Long id, @RequestBody @Valid AtualizacaoTopicoForm form) {
Optional<Topico> topico = topicoRepository.findById(id);
if(topico.isPresent()) {
form.atualizar(id, topicoRepository, topico.get());
return ResponseEntity.ok(new TopicoDto(topico.get()));
}
return ResponseEntity.notFound().build();
}
public Topico atualizar(Long id, TopicoRepository topicoRepository) {
Topico topico = topicoRepository.getOne(id);
topico.setTitulo(this.titulo);
topico.setMensagem(this.mensagem);
return topico;
}
Sugestão:
@PutMapping("/{id}")
@Transactional
public ResponseEntity<TopicoDto> atualizar(@PathVariable Long id, @RequestBody @Valid AtualizacaoTopicoForm form) {
Optional<Topico> topico = topicoRepository.findById(id);
if(topico.isPresent()) {
form.atualizar(topico.get());
return ResponseEntity.ok(new TopicoDto(topico.get()));
}
return ResponseEntity.notFound().build();
}
public Topico atualizar(Topico topico) {
topico.setTitulo(this.titulo);
topico.setMensagem(this.mensagem);
return topico;
}