21
respostas

Temporadas não aparecem 2

Estou com mesmo problema, consultei todas as linhas de código e erro persiste,

meus erros são iguai a do Guilherme e os códigos estão corretos.

Percebi que entre uma série e outra aparece variações como: /6/todas - /5/todas etc...

Poderiam ajudar por gentileza?

21 respostas

Bom dia Carlos tudo bem?

Poderia me dar mais alguns detalhes sobre os erros, ou talvez quem eh o guilherme ?

Apenas um pequeno ps: o endpoint para ver todas as temporadas de uma serie eh = /{idDaSerie}/temporadas/todas. Nao sei se isso te ajuda mas eh um ponto que notei pelo que escreveu na sua duvida

Insira aqui a descrição dessa imagem para ajudar na acessibilidade Não carrega as temporadas

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Segue a linha de código:

package br.com.academia.series.repository;

import br.com.academia.series.model.Categoria; import br.com.academia.series.model.Episodio; import br.com.academia.series.model.Series; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query;

import java.util.List; import java.util.Optional;

public interface SerieRepository extends JpaRepository<Series, Long> { Optional findByTituloContainingIgnoreCase(String nomeSerie);

List<Series> findByAtoresContainingIgnoreCaseAndAvaliacaoGreaterThanEqual(String nomeAtor, double avaliacao);

List<Series> findTop5ByOrderByAvaliacaoDesc();

List<Series> findByGenero(Categoria categoria);

List<Series> findByTotalTemporadasLessThanEqualAndAvaliacaoGreaterThanEqual(int totalTemporadas, double avaliacao);

@Query("select s from Series s WHERE s.totalTemporadas <= :totalTemporadas AND s.avaliacao >= :avaliacao")
List<Series> seriesPorTemporadaEAValiacao(int totalTemporadas, double avaliacao);

@Query("SELECT e FROM Series s JOIN s.episodio e WHERE e.titulo ILIKE %:trechoEpisodio%")
List<Episodio> episodiosPorTrecho(String trechoEpisodio);

@Query("SELECT e FROM Series s JOIN s.episodio e WHERE s = :series ORDER BY e.avaliacao DESC LIMIT 5")
List<Episodio> topEpisodiosPorSerie(Series series);

@Query("SELECT e FROM Series s JOIN s.episodio e WHERE s = :series AND YEAR(e.dataLancamento) >= :anoLancamento")
List<Episodio> episodiosPorSerieEAno(Series series, int anoLancamento);

@Query("SELECT s FROM Series s " +
        "JOIN s.episodio e " +
        "GROUP BY s " +
        "ORDER BY MAX(e.dataLancamento) DESC LIMIT 5")
List<Series> lancamentosMaisRecentes();

@Query("SELECT e FROM Series s JOIN s.episodio e WHERE s.id = :id AND e.temporadas = :numero")
List<Episodio> obterEpisodiosPorTemporada(Long id, Long numero);

}

No console log, pode refazer a chamada e clicar nessa requisicao

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Outra coisa, no seu projeto deve ter uma classe SerieService e nela deve ter um metodo obterPorId, pode postar aqui o conteudo desse metodo, porfavor?

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Imagem acima como solicitado

Abaixo segue o código serieService:

package br.com.academia.series.service;

import br.com.academia.series.dto.EpisodioDTO; import br.com.academia.series.dto.SerieDTO; import br.com.academia.series.model.Categoria; import br.com.academia.series.model.Series; import br.com.academia.series.repository.SerieRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;

import java.util.List; import java.util.Optional; import java.util.stream.Collectors;

//Já entende que vai lidar com acesso ao banco @Service public class SerieService {

@Autowired
private SerieRepository repositorio;

public List<SerieDTO> obterTodasAsSeries() {
    return converteDados(repositorio.findAll());
}

public List<SerieDTO> obterTop5Series() {
    return converteDados(repositorio.findTop5ByOrderByAvaliacaoDesc());
}

private List<SerieDTO> converteDados(List<Series> series) {
    return series.stream()
            .map(s -> new SerieDTO(s.getId(), s.getTitulo(), s.getTotalTemporadas(), s.getAvaliacao(), s.getGenero(), s.getAtores(), s.getPoster(), s.getSinopse()))
            .collect(Collectors.toList());
}

public List<SerieDTO> obterLancamentos() {
    return converteDados(repositorio.lancamentosMaisRecentes());
}

public SerieDTO obterPorId(Long id) {
    Optional<Series> series = repositorio.findById(id);

    if (series.isPresent()) {
        Series s = series.get();
        return new SerieDTO(s.getId(), s.getTitulo(), s.getTotalTemporadas(), s.getAvaliacao(), s.getGenero(), s.getAtores(), s.getPoster(), s.getSinopse());
    }
    return null;
}

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

    if (series.isPresent()) {
        Series s = series.get();
        return s.getEpisodio().stream()
                .map(e -> new EpisodioDTO(e.getTemporadas(), e.getNumeroEpisodio(), e.getTitulo()))
                .collect(Collectors.toList());
    }
    return null;
}

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

public List<SerieDTO> obterSeriesPorCategoria(String nomeGenero) {
    Categoria categoria = Categoria.fromPortugues(nomeGenero);
    return converteDados(repositorio.findByGenero(categoria));
}

public List<EpisodioDTO> obterTopEpisodios(Long id) {
    var serie = repositorio.findById(id).get();
    return repositorio.topEpisodiosPorSerie(serie)
            .stream()
            .map(e -> new EpisodioDTO(e.getTemporadas(), e.getNumeroEpisodio(), e.getTitulo()))
            .collect(Collectors.toList());
}

}

Pelo que me enviou aqui, parece que sua base de dados realmente nao tem nada cadastrado, e por isso esta devolvendo null.

public SerieDTO obterPorId(Long id) {
    Optional<Series> series = repositorio.findById(id);

    if (series.isPresent()) {
        Series s = series.get();
        return new SerieDTO(s.getId(), s.getTitulo(), s.getTotalTemporadas(), s.getAvaliacao(), s.getGenero(), s.getAtores(), s.getPoster(), s.getSinopse());
    }
    return null;
}

O que aparece no navegador quando sua aplicacao esta rodando e voce tenta acessar http://localhost:8080/series ?

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Sim, como exemplo acima, mas quando na URL: localhost:8080/serie/lancamentos aparecem vazio

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Não sei mais o que fazer...

Pelo que parece existe alguma parte do seu codigo que nao esta carregando todas as series.

Se tiver utilizando o git para guardar seu codigo e puder postar aqui o link do repositorio posso dar uma olhada.

No console do navegador, ou no console da aplicacao Spring, tem algum erro que voce pode postar aqui para eu analisar?

Desculpa Carlos, acho que me enganei, estou vendo aqui o curso para ver se entendo um pouco mais do contexto da aplicacao para te ajuda.

Neste print que me enviou, pode colocar aqui o que aparece quando clica em resposta Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Aparece vazio

[]

Certo, vou fazer alguns testes aqui e ja volto aqui ok ?

Quer me chamr por Teams?

Descobri ahahahah,

Voce carregou todas as series que queria mas nao carregou os episodios.

  1. Com o banco de dados de pe vc precisa ir na branch main e rodar a aplicacao
  2. Depois no console da linha de comando vc tem que acessar o item 2
    1. Insira aqui a descrição dessa imagem para ajudar na acessibilidade
  3. Depois disso ele vai pedir o nome de qual serie vc quer carregar os episodios e vc coloca por exemplo "game of thrones"
    1. Insira aqui a descrição dessa imagem para ajudar na acessibilidade
  4. Agora basta desligar essa aplicacao, voltar para a branch que estava trabalhando, e assim voce vai ter carregado todos os dados para a base de dados e podera acessar pelo navegador
    1. Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Se tiver qualquer duvida pode colocar aqui e eu vou tentando ajudar rsrs

Como faço novas buscas? A classe Principal não aparece a opção RUN no InteliJ

Para vc corrigir este problema vc vai ter que fazer o seguinte:

  1. Clonar novamente o repositorio disponibilizado pela equipe da alura ou baixar o zip dele, o importante eh que vc tenha o codigo da primeira versao que disponibilizaram. Seu objetivo eh rodar novamente aquela outra class main que na aula 4 esta comentada e o nome da classe eh ScreenmatchApplicationSemWeb.java.
    1. https://github.com/alura-cursos/3356-java-screenmatch-web
  2. Depois de baixar a versao antiga voce vai precisar ajustar a conexao com a base de dados novamente e depois basta rodar a classe main e o console ira aparecer para voce.

Caso vc nao queria baixar novamente voce teria que fazer varios ajustes no seu codigo atual, e para nao impactar voce a melhor ideia eh baixar em uma pasta separada o antigo codigo.

Basicamente voce tera que abrir um "novo" projeto no intelliJ que seja a versao antiga do codigo do ScreenMatch

Não deu certo...eu até incluí mais séries no banco, mais os episódios ainda não aparecem

Sao duas operacoes diferentes, o 1 voce inclui as series mas depois voce tem que fazer o 2 para incluir tambem os episodios

Bom dia Carlos, tudo bem ??

Estava revendo a formacao para ver se nao tinha deixado nada escapar. Pelo que entendi toda essa populacao da base de dados ocorre neste modulo Mapeando Relacionamentos talvez seja interessante dar uma revisada para ver se o seu codigo esta de acordo com o que foi montado aqui