Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
0
respuestas

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;

}