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

Não estão vindo as imagens

Fiz tudo direitinho mas não estão vindo as imagens!

print da localhost:8080/series

print da pagina web

Print da página web

Print da página web

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
11 respostas
solução!

Bom dia, Terezinha! Como vai?

Estou aqui para te ajudar, mas, não foi possível compreender totalmente o seu cenário.

Para que eu possa te orientar melhor, me responda o seguinte: poderia compartilhar o seu projeto do Backend? Você fez alguma alteração no projeto Frontend?

Fico no aguardo. Abraços e bons estudos!

package br.com.alura.screenmatch.principal;

import br.com.alura.screenmatch.model.*;
import br.com.alura.screenmatch.repository.SerieRepository;
import br.com.alura.screenmatch.service.ConsumoApi;
import br.com.alura.screenmatch.service.ConverteDados;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;
import java.util.Scanner;
import java.util.stream.Collectors;

public class Principal {

    private Scanner leitura = new Scanner(System.in);
    private ConsumoApi consumo = new ConsumoApi();
    private ConverteDados conversor = new ConverteDados();
    private final String ENDERECO = "https://www.omdbapi.com/?t=";
    private final String API_KEY =  API_KEY_TECA;
    private List<DadosSerie> dadosSeries = new ArrayList<>();

    private SerieRepository repositorio;
    private List<Serie> series = new ArrayList<>();
    private Optional<Serie> serieBusca;

    public Principal(SerieRepository repositorio) {
        this.repositorio = repositorio;
    }

    public void exibeMenu() {
        var opcao = -1;
        while(opcao != 0) {
            var menu = """
                    1 - Buscar séries
                    2 - Buscar episódios
                    3 - Listar séries buscadas
                    4 - Buscar série por título
                    5 - Buscar séries por ator
                    6 - Top 5 Séries
                    7 - Buscar séries por categoria
                    8 - Filtrar séries
                    9 - Buscar episódios por trecho
                    10 - Top 5 episódios por série
                    11 - Buscar episódios a partir de uma data 
                                    
                    0 - Sair                                 
                    """;

            System.out.println(menu);
            opcao = leitura.nextInt();
            leitura.nextLine();

            switch (opcao) {
                case 1:
                    buscarSerieWeb();
                    break;
                case 2:
                    buscarEpisodioPorSerie();
                    break;
                case 3:
                    listarSeriesBuscadas();
                    break;
                case 4:
                    buscarSeriePorTitulo();
                    break;
                case 5:
                    buscarSeriesPorAtor();
                    break;
                case 6:
                    buscarTop5Series();
                    break;
                case 7:
                    buscarSeriesPorCategoria();
                    break;
                case 8:
                    filtrarSeriesPorTemporadaEAvaliacao();
                    break;
                case 9:
                    buscarEpisodioPorTrecho();
                    break;
                case 10:
                    topEpisodiosPorSerie();
                    break;
                case 11:
                    buscarEpisodiosDepoisDeUmaData();
                    break;
                case 0:
                    System.out.println("Saindo...");
                    break;
                default:
                    System.out.println("Opção inválida");
            }
        }
    }

    private void buscarSerieWeb() {
        DadosSerie dados = getDadosSerie();
        Serie serie = new Serie(dados);
        //dadosSeries.add(dados);
        repositorio.save(serie);
        System.out.println(dados);
    }

    private DadosSerie getDadosSerie() {
        System.out.println("Digite o nome da série para busca");
        var nomeSerie = leitura.nextLine();
        var json = consumo.obterDados(ENDERECO + nomeSerie.replace(" ", "+") + API_KEY);
        DadosSerie dados = conversor.obterDados(json, DadosSerie.class);
        return dados;
    }

   
 private void buscarEpisodioPorSerie(){
        listarSeriesBuscadas();
        System.out.println("Escolha uma série pelo nome");
        var nomeSerie = leitura.nextLine();

        Optional<Serie> serie = repositorio.findByTituloContainingIgnoreCase(nomeSerie);

        if(serie.isPresent()) {

            var serieEncontrada = serie.get();
            List<DadosTemporada> temporadas = new ArrayList<>();

            for (int i = 1; i <= serieEncontrada.getTotalTemporadas(); i++) {
                var json = consumo.obterDados(ENDERECO + serieEncontrada.getTitulo().replace(" ", "+") + "&season=" + i + API_KEY);
                DadosTemporada dadosTemporada = conversor.obterDados(json, DadosTemporada.class);
                temporadas.add(dadosTemporada);
            }
            temporadas.forEach(System.out::println);

            List<Episodio> episodios = temporadas.stream()
                    .flatMap(d -> d.episodios().stream()
                            .map(e -> new Episodio(d.numero(), e)))
                    .collect(Collectors.toList());

            serieEncontrada.setEpisodios(episodios);
            repositorio.save(serieEncontrada);
        } else {
            System.out.println("Série não encontrada!");
        }
    }

    private void listarSeriesBuscadas(){
        series = repositorio.findAll();
        series.stream()
                .sorted(Comparator.comparing(Serie::getGenero))
                .forEach(System.out::println);
    }

    private void buscarSeriePorTitulo() {
        System.out.println("Escolha um série pelo nome: ");
        var nomeSerie = leitura.nextLine();
        serieBusca = repositorio.findByTituloContainingIgnoreCase(nomeSerie);

        if (serieBusca.isPresent()) {
            System.out.println("Dados da série: " + serieBusca.get());

        } else {
            System.out.println("Série não encontrada!");
        }

    }

    private void buscarSeriesPorAtor() {
        System.out.println("Qual o nome para busca?");
        var nomeAtor = leitura.nextLine();
        System.out.println("Avaliações a partir de que valor? ");
        var avaliacao = leitura.nextDouble();
        List<Serie> seriesEncontradas = repositorio.findByAtoresContainingIgnoreCaseAndAvaliacaoGreaterThanEqual(nomeAtor, avaliacao);
        System.out.println("Séries em que " + nomeAtor + " trabalhou: ");
        seriesEncontradas.forEach(s ->
                System.out.println(s.getTitulo() + " avaliação: " + s.getAvaliacao()));
    }

    private void buscarTop5Series() {
        List<Serie> serieTop = repositorio.findTop5ByOrderByAvaliacaoDesc();
        serieTop.forEach(s ->
                System.out.println(s.getTitulo() + " avaliação: " + s.getAvaliacao()));
    }

    private void buscarSeriesPorCategoria() {
        System.out.println("Deseja buscar séries de que categoria/gênero? ");
        var nomeGenero = leitura.nextLine();
        Categoria categoria = Categoria.fromPortugues(nomeGenero);
        List<Serie> seriesPorCategoria = repositorio.findByGenero(categoria);
        System.out.println("Séries da categoria " + nomeGenero);
        seriesPorCategoria.forEach(System.out::println);
    }

    private void filtrarSeriesPorTemporadaEAvaliacao(){
        System.out.println("Filtrar séries até quantas temporadas? ");
        var totalTemporadas = leitura.nextInt();
        leitura.nextLine();
        System.out.println("Com avaliação a partir de que valor? ");
        var avaliacao = leitura.nextDouble();
        leitura.nextLine();
        List<Serie> filtroSeries = repositorio.seriesPorTemporadaEAValiacao(totalTemporadas, avaliacao);
        System.out.println("*** Séries filtradas ***");
        filtroSeries.forEach(s ->
                System.out.println(s.getTitulo() + "  - avaliação: " + s.getAvaliacao()));
    }

    private void buscarEpisodioPorTrecho(){
        System.out.println("Qual o nome do episódio para busca?");
        var trechoEpisodio = leitura.nextLine();
        List<Episodio> episodiosEncontrados = repositorio.episodiosPorTrecho(trechoEpisodio);
        episodiosEncontrados.forEach(e ->
                System.out.printf("Série: %s Temporada %s - Episódio %s - %s\n",
                        e.getSerie().getTitulo(), e.getTemporada(),
                        e.getNumeroEpisodio(), e.getTitulo()));
    }
 private void topEpisodiosPorSerie(){
        buscarSeriePorTitulo();
        if(serieBusca.isPresent()){
            Serie serie = serieBusca.get();
            List<Episodio> topEpisodios = repositorio.topEpisodiosPorSerie(serie);
            topEpisodios.forEach(e ->
                    System.out.printf("Série: %s Temporada %s - Episódio %s - %s Avaliação %s\n",
                            e.getSerie().getTitulo(), e.getTemporada(),
                            e.getNumeroEpisodio(), e.getTitulo(), e.getAvaliacao()));
        }
    }
    private void buscarEpisodiosDepoisDeUmaData(){
        buscarSeriePorTitulo();
        if(serieBusca.isPresent()){
            Serie serie = serieBusca.get();
            System.out.println("Digite o ano limite de lançamento");
            var anoLancamento = leitura.nextInt();
            leitura.nextLine();

            List<Episodio> episodiosAno = repositorio.episodiosPorSerieEAno(serie, anoLancamento);
            episodiosAno.forEach(System.out::println);
        }
    }
}

As informações estão vindo certinhas, só não vem as imagens dos posteres. Deve ser alguma configuração aqui. Não dá erro em nada mas não vem as imagens.

Print da página web

A única alteração no Front foi trocar o número da porta como orientado. A minha estava 5050 e troquei para 5051.

Descobri aqui, a chave "("OPENAI_APIKEY"))" não funciona, parece que agora é pago. Tem alguma alternativa ? Fiz uma chave no site mas parece que não está funcionando.

 OpenAiService service = new OpenAiService(System.getenv("OPENAI_APIKEY"));
package br.com.alura.screenmatch.service;

import com.theokanning.openai.completion.CompletionRequest;
import com.theokanning.openai.service.OpenAiService;

public class ConsultaChatGPT {
    public static String obterTraducao(String texto) {
        OpenAiService service = new OpenAiService(System.getenv("OPENAI_APIKEY"));


        CompletionRequest requisicao = CompletionRequest.builder()
                .model("text-davinci-003")
                .prompt("traduza para o português o texto: " + texto)
                .maxTokens(1000)
                .temperature(0.7)
                .build();


        var resposta = service.createCompletion(requisicao);
        return resposta.getChoices().get(0).getText();
    }
}

Bom dia, Terezinha!

O seu problema, relacionado as imagens não estarei aparecendo, imagino que não haja nada a ver com a API de tradução, então vamos tratar cada uma como um problema diferente.

Sobre o problema com as imagens, recomendo que upe todo o seu projeto em um repositório do GitHub e envie o link do repositório aqui, pois as partes de código que você compartilhou não apresentam nenhum erro ou inconsistência, sendo assim, o problema pode estar em outro lugar.

Agora sobre a API de tradução, como alternativa foi adicionada uma atividade em um curso anterior a esse que mostra como utilizar essa alternativa, você pode acessar no seguinte link: Atividade.

Fico no aguardo do seu retorno!

Boa tarde, segue o link do projeto no GitHub. Link do projeto no GitHub

Boa tarde, Terezinha! Perdão pela demora em retornar!

Analisando o seu projeto, não identifiquei nenhum problema que poderia estar causando os problemas de carregamento das imagens, consegui reproduzir elas sem problemas usando o seu Backend.

O que me leva a acreditar que o problema pode estar relacionado a informação das imagens salvas no banco, para que as imagens sejam carregadas corretamente o link delas deve haver o final com ".png" ou "jpeg". Para visualizar isso, veja os seguintes passos:

  1. Com isso, recomendo que acesse o PgAdmin4, pesquisando no próprio Windows e ao acessar ele procure o banco de dados que você está usando e clique no mesmo.

  2. Quando ele abrir terá várias opções, desça até encontrar a opção "Schema" que vai estar em vermelho e clique nela. Nisso desça até achar a opção "Tabela" e clique também.

  3. Com a tabela clicada, aparecerá todas as tabelas usadas no projeto, clique com o botão direito na de séries e passo o mouse sobre a opção "View/Edit Data" e clique em "All Rows" que vai estar ao lado. Assim listará todas as informações presentes na tabela.

  4. Com as informações amostra, procure a coluna poster e clique em qualquer um dos links, visualize se ele apresenta o final ".png" ou "jpeg" como no seguinte exemplo: "https://m.media-amazon.com/images/I/81IXojwauiL._SY385_.jpg".

  5. Caso não apresente, procure imagens dos pôsteres das séries que você adicionou e altere para cada uma cadastrada, ao finalizar as alterações aperte F6 para salvar as alterações ou clique no ícone de um banco de dados com um disquete a frente.

    O seguinte GIF mostra os principais passos para ficar mais visual:

GIF que mostra os passos para conseguir alterar as informações de um elemento em uma tabela de banco de dados

Espero que isso resolva o seu problema!

Eu mexi em algumas coisas aqui e as imagens apareceram. Realmente foi configuração. Mas vou salvar as suas dicas porque já estou fazendo o desafio e vou verificar se tudo está correto. Estou um pouco atrasada porque tive uma gripe forte , fiz as tabelas livros e autores. Estou trabalhando aqui qualquer dúvida eu chamo. Obrigada