1
resposta

Sugestão de melhoria aula 06.08 pós tratamento de erro para registro não encontrado em método atualizar

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;
    }
1 resposta

Oi Rodney,

Bem observado!

Realmente não faz sentido utilizar o repository 2 vezes para buscar por id.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software