Pesquisando no código e aqui no fórum cheguei à seguinte solução:
- SerieRepository:
@Query("SELECT e from Serie s " +
"JOIN s.episodios e " +
"WHERE s.id = :id " +
"ORDER BY e.avaliacao DESC LIMIT 5")
List<Episodio> top5EpisodiosPorId(Long id);
- SerieController:
@GetMapping("/{id}/temporadas/top")
public List<EpisodioDTO> obterTop5Episodios(@PathVariable Long id){
return servico.obterTop5Episodios(id);
}
- SerieService:
private List<EpisodioDTO> converteDadosEpisodios(List<Episodio> episodios){
return episodios.stream()
.map(e -> new EpisodioDTO(
e.getTemporada(),
e.getTitulo(),
e.getNumeroEpisodio()))
.collect(Collectors.toList());
}
public List<EpisodioDTO> obterTop5Episodios(Long id) {
return converteDadosEpisodios(repositorio.top5EpisodiosPorId(id));
}
Ao testar achei que tinha feito algo errado, pois, não importava a temporada que eu escolhia, ele sempre retornava o Top5, até que encontrei aqui o seguinte tópico https://cursos.alura.com.br/forum/topico-bug-possivel-bug-no-front-353467 . Implementei a solução no Front e tudo funcionou!