Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Inserir Respostas em um determinado Tópico

Qual seria a melhor solução para implementar a inserção de respostas em um determinado tópico ? Eu utilizaria o mesmo PUT do /topicos ?

Como eu saberia que a resposta que o usuário enviou é de um determinado topico ?

6 respostas

para implementar a inserção de respostas você utilizaria um POST /topicos

Não entendi: "Como eu saberia que a resposta que o usuário enviou é de um determinado topico"

Por exemplo, como eu mapearia um endpoint que pega um Determinado Topico e insere uma resposta na Lista de respostas dele ? Eu passaria o ID do Topico que eu quero inserir a resposta ? Pois a Resposta é um Model, que contém um Topico dentro, com relação de muitos pra 1, ou seja, podemos ter varias respostas em um determinado topico.

Pelo que eu entendi, sempre que você criar uma resposta, o endpoint vai salvar no banco a resposta, atrelando ela a um determinado tópico. e quando tu fizer um get em um determinado topico, ele vai buscar as respostas atreladas a ele.

Então, meu endpoint de inserção de respostas, por exemplo, eu passaria o nome do autor da resposta, o conteudo e o ID do topico em que ela será atrelada e então faria um DTO onde nele eu buscaria o Topico baseado no ID que eu passei além de buscar o autor pelo nome do autor que passei, e atualizaria a tabela resposta. Não seria isso ?

solução

Oi Gabriel,

Para respostas eu criaria outro endpoint especifico:

@PostMapping("/{idTopico}/resposta")
@Transactional
public ResponseEntity<RespostaDto> responder(@PathVariable Long idTopico, @RequestBody @Valid RespostaForm form, UriComponentsBuilder uriBuilder) {
    Topico topico = topicoRepository.getOne(idTopico);
    Resposta resposta = form.converter();
    topico.adicionarResposta(resposta);

    URI uri = uriBuilder.path("/topicos/{idTopico}/resposta/{idResposta}").buildAndExpand(topico.getId(), resposta.getId()).toUri();
    return ResponseEntity.created(uri).body(new RespostaDto(resposta));
}

Bons estudos!

Show, era assim mesmo que pensei em fazer. Mas tenho outra dúvida.

A resposta lida com dois outros Models, Topico e Usuario.

Quando você fez a criação de um Tópico, a função converter (No arquivo de Topico) recebia o CursoRepository e convertia para um Curso. Agora, para esse caso em que eu lido com dois repositorios, Autor e Topico, como ficaria essa função converter do RepositoryForm ?

No caso, pelo que eu entendi, eu não precisaria passar o Topico no RepositoryForm, já que nesse endpoint que você acabou de descrever, ele já busca o Topico pelo Id.

Logo, no RepositoryForm eu só passaria o conteudo da resposta, e nome do autor que criou e na função converter eu iria converter um AutorRepository para um Autor.

Seria isso ?

Oi Gabriel,

É que nesse 1º curso de Spring Boot não veremos a parte de autenticação/autorização, mas basicamente o autor seria o usuário logado no sistema. Então não precisaria carregar ele com o repository, pois tem como solicitar ao Spring o usuário logado.

No próximo curso será abordado essas questões de autenticação/autorização.

Entendi. Show, muito obrigado!