Classe controller
package br.com.alura.forum.controller;
import java.net.URI;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.util.UriComponentsBuilder;
import br.com.alura.forum.controller.dto.TopicoDTO;
import br.com.alura.forum.controller.form.TopicoForm;
import br.com.alura.forum.modelo.Topico;
import br.com.alura.forum.repository.TopicoRepository;
@RestController
@RequestMapping("/topicos")
public class TopicosController {
@Autowired
private TopicoRepository topicoRepository;
@Autowired
private TopicoRepository cursoRepository;
@GetMapping
public List<TopicoDTO> lista(String nomeCurso) {
if (nomeCurso == null) {
List<Topico> topicos = topicoRepository.findAll();
return TopicoDTO.converter(topicos);
} else {
List<Topico> topicos = topicoRepository.findByCursoNome(nomeCurso);
return TopicoDTO.converter(topicos);
}
}
@PostMapping
public ResponseEntity<TopicoDTO> cadastrar(@RequestBody TopicoForm form, UriComponentsBuilder uriBuilder) {
Topico topico = form.converte(cursoRepository);
topicoRepository.save(topico);
URI uri = uriBuilder.path("/topicos/{id}").buildAndExpand(topico.getId()).toUri();
return ResponseEntity.created(uri).body(new TopicoDTO(topico));
}
}
Topico repository
package br.com.alura.forum.repository;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import br.com.alura.forum.modelo.Topico;
public interface TopicoRepository extends JpaRepository<Topico, Long> {
List<Topico> findByCursoNome(String nomeCurso);
}
CursoRepository
package br.com.alura.forum.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import br.com.alura.forum.modelo.Curso;
public interface CursoRepository extends JpaRepository<Curso, Long>{
Curso findByNome(String nome);
}
TopicoForm
package br.com.alura.forum.controller.form;
import br.com.alura.forum.modelo.Curso;
import br.com.alura.forum.modelo.Topico;
import br.com.alura.forum.repository.CursoRepository;
import br.com.alura.forum.repository.TopicoRepository;
public class TopicoForm {
private String titulo;
private String mensagem;
private String nomeCurso;
public String getTitulo() {
return titulo;
}
public void setTitulo(String titulo) {
this.titulo = titulo;
}
public String getMensagem() {
return mensagem;
}
public void setMensagem(String mensagem) {
this.mensagem = mensagem;
}
public String getNomeCurso() {
return nomeCurso;
}
public void setNomeCurso(String nomeCurso) {
this.nomeCurso = nomeCurso;
}
public Topico converte (CursoRepository cursoRepository) {
Curso curso = cursoRepository.findByNome(nomeCurso);
return new Topico(titulo, mensagem, curso);
}
}