Fiz tudo direitinho mas não estão vindo as imagens!
print da localhost:8080/series
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);
}
}
}
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, 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:
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.
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.
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.
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".
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:
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