Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Minhas temporadas não aparecem

Não sei ao certo mas nenhuma temporada aparece: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

3 respostas

Verifiquei digitação e acredito que o endpoint está sem erro de digitação.

O retorno do http://localhost:8080/series/2/temporadas/todas é um array vazio e o http://localhost:8080/series/2/temporadas/ da erro 404

Olá Guilherme!

Pelo que você descreveu e pela imagem que você compartilhou, parece que o seletor de temporadas não está exibindo as temporadas disponíveis. Vamos verificar alguns pontos que podem estar causando esse problema:

  1. Verifique a URL no Controller: Certifique-se de que a URL /temporadas/todas está corretamente configurada no seu SerieController.java. O código deve estar assim:

    @GetMapping("/{id}/temporadas/todas")
    public List<EpisodioDTO> obterTodasTemporadas(@PathVariable Long id){
        return servico.obterTodasTemporadas(id);
    }
    
  2. Verifique o método no Service: Certifique-se de que o método obterTodasTemporadas no SerieService está implementado corretamente e que ele está retornando os episódios. O código deve estar assim:

    public List<EpisodioDTO> obterTodasTemporadas(Long id) {
        Optional<Serie> serie = repositorio.findById(id);
    
        if (serie.isPresent()) {
            Serie s = serie.get();
            return s.getEpisodios().stream()
                            .map(e -> new EpisodioDTO(e.getTemporada(), e.getNumeroEpisodio(), e.getTitulo()))
                            .collect(Collectors.toList());
        }
        return null;
    }
    
  3. Verifique o Front-end: Certifique-se de que o front-end está fazendo a requisição correta para a URL /temporadas/todas. Você pode verificar isso no console do navegador (pressionando F12 e indo para a aba "Network") para ver se a requisição está sendo feita e se está retornando os dados esperados.

  4. Verifique o DTO: Certifique-se de que o EpisodioDTO está corretamente definido:

    public record EpisodioDTO(Integer temporada, Integer numeroEpisodio, String titulo) {
    }
    
  5. Verifique o JavaScript: Certifique-se de que o JavaScript no front-end está tratando a resposta corretamente e populando o seletor de temporadas. Algo como:

    fetch('/series/temporadas/todas')
        .then(response => response.json())
        .then(data => {
            const seletor = document.getElementById('seletor-temporada');
            data.forEach(temporada => {
                const option = document.createElement('option');
                option.value = temporada.temporada;
                option.text = `Temporada ${temporada.temporada}`;
                seletor.appendChild(option);
            });
        });
    

Espero que essas dicas ajudem a resolver o problema. Verifique cada um desses pontos e veja se alguma coisa está faltando ou configurada incorretamente.

Espero ter ajudado e bons estudos!

solução!

Olá!

Eu sei que provavelmente o erro está na minha cara mas não consigo enxergar kkkkkkkkk, minhas classes e metodos estão assim (https://github.com/guimaraesguii/Screen-Match/tree/fix-erro-404):

Controller:

    @GetMapping("/{id}/temporadas/todas")
    public List<EpisodioDTO> obterTodasTemporadas(@PathVariable Long id){
        return service.obterTodasTemporadas(id);
    }

Service:

   public List<EpisodioDTO> obterTodasTemporadas(Long id) {
        Optional<Serie> serie = repositorio.findById(id);

        if (serie.isPresent()) {
            Serie s = serie.get();
            return s.getEpisodios().stream()
                    .map(e -> new EpisodioDTO(e.getTemporada(), e.getNumeroEpisodio(), e.getTitulo()))
                    .collect(Collectors.toList());
        }
        return null;
    }

DTO:

public record EpisodioDTO(Integer temporada,
        Integer numeroEpisodio,
        String titulo) {
}

JavaScript:

getDados(`/series/${serieId}/temporadas/todas`)
        .then(data => {
            const temporadasUnicas = [...new Set(data.map(temporada => temporada.temporada))];
            listaTemporadas.innerHTML = ''; // Limpa as opções existentes

            const optionDefault = document.createElement('option');
            optionDefault.value = '';
            optionDefault.textContent = 'Selecione a temporada'
            listaTemporadas.appendChild(optionDefault); 
           
            temporadasUnicas.forEach(temporada => {
                const option = document.createElement('option');
                option.value = temporada;
                option.textContent = temporada;
                listaTemporadas.appendChild(option);
            });