package com.entronomia.aplicaciones.biblioteca;
import com.entronomia.aplicaciones.biblioteca.modelo.DatosAutor;
import com.entronomia.aplicaciones.biblioteca.modelo.DatosBiblioteca;
import com.entronomia.aplicaciones.biblioteca.modelo.DatosLibro;
import com.entronomia.aplicaciones.biblioteca.modelo.Libro;
import com.entronomia.aplicaciones.biblioteca.servicio.ConsumoAPI;
import com.entronomia.aplicaciones.biblioteca.servicio.ConversorDatos;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import java.util.ArrayList;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
@SpringBootApplication
public class BibliotecaApplication implements CommandLineRunner {
public static void main(String[] args) {
SpringApplication.run(BibliotecaApplication.class, args);
}
@Override
public void run(String... args) throws Exception {
ConsumoAPI consumoAPI = new ConsumoAPI();
ConversorDatos conversorDatos = new ConversorDatos();
Scanner entrada = new Scanner(System.in);
DatosLibro datosLibro = null;
DatosAutor datosAutor = null;
DatosBiblioteca datosBiblioteca = null;
List<Libro> librosEnPagina = new ArrayList<>();
List<Libro> inventario = new ArrayList<>();
for (int i = 1; i <= 28; i++) {
String json = consumoAPI.obtenerDatos("https://gutendex.com/books/?languages=es&page="+i);
datosBiblioteca = conversorDatos.obtenerDatos(json, DatosBiblioteca.class);
librosEnPagina = datosBiblioteca.datosBiblioteca().stream().map(l -> new Libro(l)).toList();
inventario.addAll(librosEnPagina);
}
System.out.println(inventario);
DoubleSummaryStatistics estadisticas = inventario.stream()
.collect(Collectors.summarizingDouble(Libro::getDescargas));
System.out.println(estadisticas);
System.out.println("Promedio de las descargas: " + estadisticas.getAverage());
System.out.println("Libro mas descargado: " + estadisticas.getMax());
System.out.println("Libro menos descargado: " + estadisticas.getMin());
System.out.println("Apellido del autor a buscar (letras minusculas): ");
String nombreAutor = entrada.nextLine();
json = consumoAPI.obtenerDatos("https://gutendex.com/books/?search="+nombreAutor);
System.out.println(json);
var resultadoConsulta = conversorDatos.obtenerDatos(json, DatosBiblioteca.class);
System.out.println(resultadoConsulta);*/
//Los 10 libros mas descargados
System.out.println("Los 10 libros mas descargados");
inventario.stream()
.sorted(Comparator.comparing(Libro::getDescargas).reversed())
.limit(10)
.map(libro -> libro.getTitulo().toUpperCase())
.forEach(System.out::println);
}
}
package com.entronomia.aplicaciones.biblioteca.modelo;
@JsonIgnoreProperties(ignoreUnknown = true)
public record DatosBiblioteca(
@JsonAlias("count") Integer cantidadDeLibros,
@JsonAlias("results") ArrayList<DatosLibro> datosBiblioteca
) {
}
package com.entronomia.aplicaciones.biblioteca.modelo;
@JsonIgnoreProperties(ignoreUnknown = true)
public record DatosLibro(
@JsonAlias("id") Integer id,
@JsonAlias("title") String titulo,
@JsonAlias("authors") ArrayList<DatosAutor> autores,
@JsonAlias("download_count") Integer descargas
) {
}
package com.entronomia.aplicaciones.biblioteca.modelo;
@JsonIgnoreProperties(ignoreUnknown = true)
public record DatosAutor(
@JsonAlias("name") String nombre,
@JsonAlias("birth_year") String annoDeNacimiento,
@JsonAlias("death_year") String annoDeDeceso
) {
}
package com.entronomia.aplicaciones.biblioteca.modelo;
public class Libro {
private Integer numeroID;
private String titulo;
private List<DatosAutor> autor;
private Integer descargas;
public Libro(DatosLibro l) {
this.numeroID = l.id();
this.titulo = l.titulo();
this.autor = l.autores();
this.descargas = l.descargas();
}
public Integer getNumeroID() {
return numeroID;
}
public String getTitulo() {
return titulo;
}
public List<DatosAutor> getAutor() {
return autor;
}
public Integer getDescargas() {
return descargas;
}
@Override
public String toString() {
return "numeroID=" + numeroID +
", titulo='" + titulo + '\'' +
", autor='" + autor + '\'' +
", descargas=" + descargas;
}
}