package com.tuempresa.series.service;
import com.tuempresa.series.dto.DatosSerie;
import com.tuempresa.series.dto.DatosSerieDetalle;
import com.tuempresa.series.model.Serie;
import com.tuempresa.series.repository.SerieRepository;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class SerieService {
private final SerieRepository repositorio;
public SerieService(SerieRepository repositorio) {
this.repositorio = repositorio;
}
public List<DatosSerie> obtenerSeries() {
return repositorio.findAll()
.stream()
.map(s -> new DatosSerie(
s.getId(),
s.getTitulo(),
s.getTotalTemporadas(),
s.getEvaluacion(),
s.getPoster()
))
.toList();
}
public List<DatosSerie> obtenerTop5() {
return repositorio.findTop5ByOrderByEvaluacionDesc()
.stream()
.map(s -> new DatosSerie(
s.getId(),
s.getTitulo(),
s.getTotalTemporadas(),
s.getEvaluacion(),
s.getPoster()
))
.toList();
}
public List<DatosSerie> obtenerLanzamientos() {
return repositorio.findTop5ByOrderByFechaLanzamientoDesc()
.stream()
.map(s -> new DatosSerie(
s.getId(),
s.getTitulo(),
s.getTotalTemporadas(),
s.getEvaluacion(),
s.getPoster()
))
.toList();
}
public DatosSerieDetalle obtenerDetalle(Long id) {
Serie serie = repositorio.findById(id)
.orElseThrow();
return new DatosSerieDetalle(
serie.getId(),
serie.getTitulo(),
serie.getTotalTemporadas(),
serie.getEvaluacion(),
serie.getPoster(),
serie.getGenero(),
serie.getActores(),
serie.getSinopsis()
);
}
}
package com.tuempresa.series.controller;
import com.tuempresa.series.dto.DatosSerie;
import com.tuempresa.series.dto.DatosSerieDetalle;
import com.tuempresa.series.service.SerieService;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/series")
public class SerieController {
private final SerieService servicio;
public SerieController(SerieService servicio) {
this.servicio = servicio;
}
@GetMapping
public List<DatosSerie> obtenerSeries() {
return servicio.obtenerSeries();
}
@GetMapping("/top5")
public List<DatosSerie> obtenerTop5() {
return servicio.obtenerTop5();
}
@GetMapping("/lanzamientos")
public List<DatosSerie> obtenerLanzamientos() {
return servicio.obtenerLanzamientos();
}
@GetMapping("/{id}")
public DatosSerieDetalle obtenerDetalle(@PathVariable Long id) {
return servicio.obtenerDetalle(id);
}
}
package com.tuempresa.series.repository;
import com.tuempresa.series.model.Serie;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
public interface SerieRepository extends JpaRepository<Serie, Long> {
List<Serie> findTop5ByOrderByEvaluacionDesc();
List<Serie> findTop5ByOrderByFechaLanzamientoDesc();
}
package com.tuempresa.series.dto;
public record DatosSerie(
Long id,
String titulo,
Integer totalTemporadas,
Double evaluacion,
String poster
) {
}
package com.tuempresa.series.dto;
public record DatosSerieDetalle(
Long id,
String titulo,
Integer totalTemporadas,
Double evaluacion,
String poster,
String genero,
String actores,
String sinopsis
) {
}
package com.tuempresa.series.model;
import jakarta.persistence.*;
import java.time.LocalDate;
@Entity
@Table(name = "series")
public class Serie {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String titulo;
private Integer totalTemporadas;
private Double evaluacion;
private String poster;
private String genero;
private String actores;
@Column(columnDefinition = "TEXT")
private String sinopsis;
private LocalDate fechaLanzamiento;
}