Detalhando tópico
O novo método de detalhar tópico, é acionado através do verbo GET, porém como no controller já existe um método get mapeado, é preciso especificar um caminho, neste caso com o id do tópico que será detalhado. Para informar ao Spring que o id do tópico está na URL, é utilizado a anotação @PathVariable.
Para detalha um tópico, precisamos criar um novo DTO, pois o TopicoDTO não tem informações suficientes. Essa uma vantagem de utilizar DTOs, eles fornecem uma flexibilidade ao código.
Novo DTO:
Relembrando: Um dto só pode possuir atributos de tipos primitivos, por isso esse dto possuem uma lista de RespostaDTO.
O método é utilizado para atualizar um recurso. Porém, há uma discussão sobre esse método, pois também existe o método PATCH para fazer atualização. Entretanto, os dois tem diferenças, o Put tem como ideia atualizar o recurso inteiro, ou seja, todas as informações, enquanto o Patch é uma pequena atualização, atualizando um ou poucos campos.
Essa discussão levou a um consenso, como existe situações em que não como saber se o recurso inteiro ou parte dele será alterado, foi adotado como costume utilizar o PUT.
O método de atualizar utiliza uma variável id, passada pela URL (@PathVariable), e as atualizações são passadas pelo body da requisição (@RequestBody), sendo essa informações recebidas em um form, permitindo flexibilidade ao código.
A atualização no form é feita buscando o recurso original no banco através do repository, e settando as alterações nos campos.
Ao retornar uma responseEntity, o método é terminado. Ao seu fim, o recurso alterado é commitado no banco de dados (@Transaction).
O método para deletar é simples, pois só é necessário o id do recurso que será removido.