Eu resolvi da seguinte maneira e preferi o retorno de uma lista vazia em vez de null
SerieController
@GetMapping("/{id}/temporadas/top")
public List<EpisodioDTO> obterEpisodiosTopCinco(@PathVariable Long id) {
return servico.obterEpisodiosTopCinco(id);
}
SerieService
public List<EpisodioDTO> obterEpisodiosTopCinco(Long id) {
return repository.topEpisodiosPorSerie(id, PageRequest.of(0, 5))
.stream()
.map(e -> new EpisodioDTO(
e.getTemporada(),
e.getNumeroEpisodio(),
e.getTitulo(),
e.getAvaliacao()
))
.collect(Collectors.toList());
}
SerieRepository
@Query("SELECT e FROM Serie s JOIN s.episodios e WHERE s.id = :id ORDER BY e.avaliacao DESC")
List<Episodio> topEpisodiosPorSerie(Long id, Pageable pageable);
**Obs: Utilizei Pageable com PageRequest.of(0, 5) para limitar o retorno aos cinco episódios mais bem avaliados. Dessa forma, a paginação é feita pelo Spring Data e evita o uso de LIMIT, que não pertence ao padrão JPQL.
- Mudei o front tb para aparecer a avaliação do top5 episodios, na função carregarTopEpisodios eu adicionei
Series.js
Episódio ${serie.numeroEpisodio} - Temporada ${serie.temporada} - ${serie.titulo} - Avaliação: ${serie.avaliacao}