Skip to content

Commit

Permalink
Update: agrego función para buscar autores y para obtener los 10 libr…
Browse files Browse the repository at this point in the history
…os más descargados
  • Loading branch information
NicoNZ12 committed Jun 1, 2024
1 parent 039ed91 commit 845969f
Show file tree
Hide file tree
Showing 5 changed files with 74 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.fasterxml.jackson.annotation.JsonAlias;


public record AuthorDTO(
@JsonAlias("name")
String authorName,
Expand All @@ -14,6 +15,10 @@ public record AuthorDTO(
) {
@Override
public String toString() {
return authorName;
return "----- Autor -----" +
"\n Nombre: " + authorName +
"\n Fecha de Nacimiento: " + birthYear +
"\n Fecha de Fallecimiento: " + deathYear +
"\n ---------------\n";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import com.fasterxml.jackson.annotation.JsonAlias;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;

import java.util.List;
@JsonIgnoreProperties(ignoreUnknown = true)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.nicolasnunez.LiterAlura.entity;

import com.nicolasnunez.LiterAlura.dto.AuthorDTO;
import com.nicolasnunez.LiterAlura.dto.BookDTO;
import jakarta.persistence.*;
import lombok.Data;
import lombok.NoArgsConstructor;
Expand Down
84 changes: 66 additions & 18 deletions LiterAlura/src/main/java/com/nicolasnunez/LiterAlura/main/Main.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package com.nicolasnunez.LiterAlura.main;


import com.nicolasnunez.LiterAlura.dto.AuthorDTO;
import com.nicolasnunez.LiterAlura.dto.BookDTO;
import com.nicolasnunez.LiterAlura.dto.JsonDTO;

import com.nicolasnunez.LiterAlura.entity.Author;
Expand All @@ -11,20 +9,18 @@
import com.nicolasnunez.LiterAlura.repository.IbookRepository;
import com.nicolasnunez.LiterAlura.service.ConnectionAPI;
import com.nicolasnunez.LiterAlura.service.DataConvertion;
import jakarta.transaction.Transactional;
import org.springframework.dao.DataIntegrityViolationException;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.Scanner;

import java.util.*;
import java.util.stream.Collectors;


public class Main {
private Scanner sc = new Scanner(System.in);
private ConnectionAPI cnx = new ConnectionAPI();
private DataConvertion dataConvertion = new DataConvertion();
private static final String API_URL = "https://gutendex.com/books";
private static final String API_URL = "https://gutendex.com/books/";

private IbookRepository bookRepository;
private IAuthorRepository authorRepository;
Expand All @@ -42,9 +38,11 @@ public void displayMenu(){
System.out.println("""
1. Buscar libro por título
2. Listar libros registrados
3. Listar autores registrados
4. Listar autores vivos en un determinado año
5. Listar libros por idioma
3. Buscar autor por nombre
4. Listar autores registrados
5. Listar autores vivos en un determinado año
6. Listar libros por idioma
7. Top 10 libros más descargados
0. Salir
""");

Expand All @@ -60,15 +58,22 @@ public void displayMenu(){
getAllListedBooks();
break;
case 3:
getAuthorByName();
break;
case 4:
System.out.println("----- Autores Registrados -----\n");
getListedAuthors();
break;
case 4:
case 5:
getAuthorBetweenYears();
break;
case 5:
case 6:
getBooksByLanguage();
break;
case 7:
System.out.println("----- Top 10 libros más descargados -----\n");
getTop10Books();
break;
case 0:
System.out.println("Gracias por usar LiterAlura!\n");
break;
Expand All @@ -85,7 +90,7 @@ private void getBook() {
System.out.println("Escriba el nombre del libro: ");
String bookName = sc.nextLine();

String json = cnx.getData(API_URL + "/?search=" + bookName.replace(" ", "+"));
String json = cnx.getData(API_URL + "?search=" + bookName.replace(" ", "+"));
JsonDTO results = dataConvertion.convertData(json, JsonDTO.class);

Optional<Book> books = results.bookResults().stream()
Expand Down Expand Up @@ -122,20 +127,44 @@ private void getAllListedBooks(){
books.forEach(System.out::println);
}

private void getAuthorByName(){
System.out.println("Escribe el nombre del autor que deseas buscar: ");
String authorName = sc.nextLine();

String json = cnx.getData(API_URL + "?search=" + authorName);
JsonDTO results = dataConvertion.convertData(json, JsonDTO.class);

Optional<AuthorDTO> author = results.bookResults().stream()
.findFirst()
.map(a -> new AuthorDTO(a.authors().get(0).authorName(), a.authors().get(0).birthYear(), a.authors().get(0).deathYear()));

if(author.isPresent()){
System.out.println(author.get());
}else{
System.out.println("No se encontró autor con el nombre: " + authorName);
}
}

private void getListedAuthors(){
List<Author> authors = authorRepository.findAll();
authors.forEach(System.out::println);
}

//TODO: manejo de excepciones de las funciones: getAuthorBetweenYears() -> cuando se ingresa una letra en vez de un año.
private void getAuthorBetweenYears(){
System.out.println("Ingrese el año vivo del autor(es) que desea buscar: ");
int year = Integer.parseInt(sc.nextLine());

List<Author> authors = authorRepository.findAuthorBetweenYear(year);
authors.forEach(System.out::println);
if(authors.isEmpty()){
System.out.println("No se encontraron registros de autores vivos durante ese año en la base de datos.");
}else{
authors.forEach(System.out::println);
}

}

//TODO: manejo de excepciones -> cuando se ingresa otra cosa que no sea esos 4 idiomas.
private void getBooksByLanguage(){
System.out.println("Ingrese el idioma que desea buscar: ");
System.out.println("""
Expand All @@ -144,9 +173,28 @@ private void getBooksByLanguage(){
fr -> Francés
pt -> Portugés
""");
String language = sc.nextLine();

List<Book> books = bookRepository.findBookByLanguage(language.toUpperCase());
books.forEach(System.out::println);
String language = sc.nextLine();

List<Book> books = bookRepository.findBookByLanguage(language.toUpperCase());
if(books.isEmpty()){
System.out.println("No se encontraron libros en ese idioma");
}else{
books.forEach(System.out::println);
}
}

private void getTop10Books(){
String json = cnx.getData(API_URL);
JsonDTO results = dataConvertion.convertData(json, JsonDTO.class);

List<Book> top10Books = results.bookResults().stream()
.map(b -> new Book(b))
.sorted(Comparator.comparingLong(Book::getDownloads_count).reversed())
.limit(10)
.collect(Collectors.toList());

top10Books.stream()
.forEach(b -> System.out.println(b.getTitle() + " : " + b.getDownloads_count() + " descargas\n"));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Optional;

@Repository
public interface IAuthorRepository extends JpaRepository<Author,Long> {
Author findAuthorsByName(String name);
Expand Down

0 comments on commit 845969f

Please sign in to comment.