Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

Haga lo que hicimos

SerieService.java

package com.aluracursos.screenmatch.service;

import com.aluracursos.screenmatch.dto.SerieDTO;
import com.aluracursos.screenmatch.model.Serie;
import com.aluracursos.screenmatch.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;

@Service
public class SerieService {
@Autowired
private SerieRepository repository;

public List<SerieDTO> obtenerTodasLasSeries() {
    return convierteDatos(repository.findAll());
}

public List<SerieDTO> obtenerTop5() {
    return convierteDatos(repository.findTop5ByOrderByEvaluacionDesc());
}
public List<SerieDTO> obtenerLanzamientosMasRecientes(){
    return convierteDatos(repository.lanzamientosMasRecientes());
}
public List<SerieDTO> convierteDatos(List<Serie> serie){
    return serie.stream()
            .map(s -> new SerieDTO(s.getId(), s.getTitulo(), s.getTotalTemporadas(), s.getEvaluacion(), s.getPoster(),
                    s.getGenero(), s.getActores(), s.getSinopsis()))
            .collect(Collectors.toList());
}

public SerieDTO obtenerPorId(Long id) {
    Optional<Serie> serie = repository.findById(id);
    if (serie.isPresent()){
        Serie s = serie.get();
        return new SerieDTO(s.getId(), s.getTitulo(), s.getTotalTemporadas(), s.getEvaluacion(), s.getPoster(),
                s.getGenero(), s.getActores(), s.getSinopsis());
    }
    return null;
}

}
Copia el código
SerieController.java

package com.aluracursos.screenmatch.controller;

import com.aluracursos.screenmatch.dto.SerieDTO;
import com.aluracursos.screenmatch.service.SerieService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;

@RestController
@RequestMapping("/series")
public class SerieController {
@Autowired
private SerieService servicio;

@GetMapping()
public List<SerieDTO> obtenerTodasLasSeries(){
    return servicio.obtenerTodasLasSeries();
}

@GetMapping("/top5")
public List<SerieDTO> obtenerTop5(){
    return servicio.obtenerTop5();
}
@GetMapping("/lanzamientos")
public List<SerieDTO> obtenerLanzamientosMasRecientes(){
    return servicio.obtenerLanzamientosMasRecientes();
}

@GetMapping("/{id}")
public SerieDTO obtenerPorId(@PathVariable Long id){
    return servicio.obtenerPorId(id);
}

}
Copia el código
En el Servicio, se creó el método convierteDatos() para convertir una lista de series en seriesDto, ya que ese código estaba siendo repetido algunas veces

1 respuesta

Hola Yolima,

¡Espero que estés disfrutando del curso! Parece que estás trabajando en organizar y limpiar tu código al implementar un servicio para manejar la lógica de negocio y un controlador para gestionar las rutas de la API. Esto es una excelente práctica para mantener el código más limpio y fácil de mantener.

En tu caso, has creado un método convierteDatos() en el SerieService para convertir una lista de objetos Serie a SerieDTO. Esto es un buen ejemplo de cómo extraer métodos comunes para evitar la repetición de código, lo cual es una práctica recomendada en la programación orientada a objetos.

Además, en el controlador SerieController, estás utilizando @RequestMapping("/series") para definir una URL base para todas las rutas relacionadas con las series, lo que hace que tu API sea más organizada y fácil de entender.

Por último, el uso de @PathVariable en el método obtenerPorId es una forma eficaz de obtener una serie específica mediante su ID, lo que facilita la interacción con la API.

Si estás buscando mejorar aún más, podrías considerar manejar los casos en los que una serie no se encuentra, devolviendo una respuesta adecuada en lugar de null. Esto podría hacerse lanzando una excepción o devolviendo un código de estado HTTP apropiado.

Espero que esta explicación te sea útil y te ayude a seguir avanzando en tu aprendizaje.