1
resposta

Problema com episódios

Não sei o porque, mas os dados de episódio vem todos quebrados, desta forma:

0	
temporada	6
numeroEpisodio	6
titulo	"Hot Girl"
1	
temporada	6
numeroEpisodio	6
titulo	"The Fight"
2	
temporada	6
numeroEpisodio	6
titulo	"Diwali"
3	
temporada	6
numeroEpisodio	6
titulo	"Branch Wars"
4	
temporada	6
numeroEpisodio	6
titulo	"Customer Survey"
5	
temporada	6
numeroEpisodio	6
titulo	"Mafia"
6	
temporada	6
numeroEpisodio	6
titulo	"Costume Contest"
7	
temporada	6
numeroEpisodio	6
titulo	"Doomsday"
8	
temporada	6
numeroEpisodio	6
titulo	"The Boat"

Estou tentando há um tempo descobrir, mas n sei, código: repositorio:

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

Service

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

Controller:

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

    }

DTO:

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

Print do console: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

Ola

Um ponto que chamou minha atenção é que na consulta JPQL você está usando e.temporada = :numero, enquanto no DTO e no serviço está sendo utilizado e.getNumeroEpisodio(). Isso pode tá causando uma confusão, já que parece que a intenção é filtrar por temporada, mas o mapeamento está sendo feito pelo número do episódio.

Tenha total confiança de que o mapeamento dos dados na entidade Episodio está correto e que os dados no banco estão consistentes com o esperado. Às vezes, um mapeamento incorreto ou dados duplicados/inconsistentes podem causar problemas desse tipo.

Outra possibilidade é que a lógica de mapeamento para o EpisodioDTO não esteja considerando corretamente a temporada e o número do episódio, mapeando todos os episódios para o mesmo número de temporada e episódio.

Tu pode:

Ve se a entidade Episodio tem as propriedades temporada e numeroEpisodio corretamente mapeadas e se correspondem aos dados no banco. Ajustar a consulta JPQL para garantir que ela está filtrando corretamente por id da série e pelo número da temporada. No serviço, ve se ta mapeando os dados corretamente para o EpisodioDTO. Pode ser necessário ajustar a lógica de mapeamento para considerar a temporada e o número do episódio de forma independente.

Se possível, dá mais detalhes ou o mapeamento da entidade Episodio pra todo mundo tá na mesma página aqui