1
resposta

Resolução Mão na massa

Foi incluido no código as seguintes partes:
na SerieController:

@GetMapping("/{id}/temporadas/top")
    public List<EpisodiosDTO> obterTopEpisodios(@PathVariable Long id){
        return servico.obterTopEpisodios(id);
    }

SerieService:

 public List<EpisodiosDTO> obterTopEpisodios(Long id) {
            var serie = repositorio.findById(id)
                    .orElseThrow(() -> new EntityNotFoundException("Série não encontrada"));
            return  repositorio.topEpisodiosPorSerie(serie)
                    .stream()
                    .map(e -> new EpisodiosDTO(e.getTemporada(), e.getNumeroEpisodio(), e.getTitulo()))
                    .collect(Collectors.toList());
    }

SerieRepository:

@Query("SELECT e FROM Serie s " + "JOIN s.episodios e " + "ORDER BY e.avaliacao DESC LIMIT 5")
    List<Episodios> obterTopEpisodios(Long id);
1 resposta

Oi, Renata! Como vai?

Sua implementação no controller, service e repository ficou bem estruturada. É interessante ver como você organizou o fluxo de obtenção dos episódios com maior avaliação. Um ponto que chama atenção é o uso direto do LIMIT na @Query, o que não é suportado por padrão em JPQL.

Uma dica interessante para o futuro é usar a anotação @Query com Pageable para limitar os resultados. Veja este exemplo:


@Query("SELECT e FROM Serie s JOIN s.episodios e WHERE s.id = :id ORDER BY e.avaliacao DESC")
List topEpisodiosPorSerie(@Param("id") Long id, Pageable pageable);

No service, você poderia passar PageRequest.of(0, 5) para retornar apenas os 5 episódios mais bem avaliados.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!