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());
}
}