Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Projeto] Minha solução Branch mao-na-massa

SerieController.java

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

Mapeado o caminho do GET solicitado no front.

SerieService.java

public List<EpisodioDTO> obterTop5EpisodiosPorSerie(Long id) {
        return repositorio.obterTop5EpisodiosPorSerie(id)
                .stream()
                .map(e -> new EpisodioDTO(e.getNumeroEpisodio(), e.getTemporada(), e.getTitulo()))
                .collect(Collectors.toList());
    }

SerieRepository.java

@Query("SELECT e FROM Serie s JOIN s.episodios e WHERE s.id = :id ORDER BY e.avaliacao DESC LIMIT 5")
    List<Episodio> obterTop5EpisodiosPorSerie(Long id);

Dentro do ID da série selecionada, ordena decrescente com base na avaliação de cada episódio e limita em 5 resultados.

Demonstração no frontend:

Demonstração final no frontend

1 resposta
solução!

Olá, Roger. Tudo bem?

Muito obrigado por compartilhar o seu código aqui com a gente. Parabéns pelo trabalho. Continue com essa dedicação.

Seu uso de @Query no SerieRepository ficou bem claro e objetivo. A lógica fluindo do repositório até o controller está bem encadeada e facilita o entendimento. Boa prática ao transformar os dados diretamente com map() e Collectors.toList().

Uma dica interessante para o futuro é usar stream().limit(5) quando estiver filtrando listas em memória.Veja este exemplo:


List top5 = numeros.stream()
    .sorted(Comparator.reverseOrder())
    .limit(5)
    .collect(Collectors.toList());

Esse código pega os 5 maiores números de uma lista e ordena de forma decrescente.

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