Pequeño catálogo de libros construido en Java con Spring Boot como parte del challenge de Alura.
La aplicación consume la API de Gutendex para buscar libros y luego los guarda en una base de datos local para trabajar con ellos mediante consultas JPA.
La idea principal no es consultar la API todo el tiempo, sino construir tu propia biblioteca persistente y realizar consultas sobre ella.
✔ Buscar libro por título (consulta a la API)
✔ Guardar libro en base de datos local
✔ Listar todos los libros guardados
✔ Listar autores registrados
✔ Buscar autores vivos en un determinado año
✔ Listar libros por idioma
✔ Top 10 libros más descargados (según los datos guardados)
✔ Mensaje dramático al cerrar la app 😌
- El usuario ingresa el título del libro.
- La app consulta la API:
https://gutendex.com/books/ - Se toma el primer resultado.
- Se verifica si el libro ya existe en la base de datos.
- Si no existe, se pregunta si desea guardarlo.
- A partir de ahí, todas las consultas se hacen sobre la base local.
Importante:
El proyecto está diseñado para trabajar con los libros guardados, no para consultar la API constantemente.
- Java 17+
- Spring Boot
- Spring Data JPA
- Hibernate
- Base de datos H2 / PostgreSQL (según configuración)
- API Gutendex
com.alura.literalura │ ├── model ├ ├── DatosLibro ├ ├── DatosAutor ├ ├── Datos │ ├── Libro.java │ └── Autor.java │ ├── Principal │ ├── Principal.java ├── repository │ ├── LibroRepository.java │ └── AutorRepository.java │ ├── service │ └── LiteraluraApplication.java
- Consumo de API REST
- Conversión de JSON a objetos Java
- Persistencia con JPA
- Relaciones @ManyToOne entre Libro y Autor
- Derived Queries
- Consultas personalizadas con @Query
- Ordenamientos y filtros
- Manejo de Optional
- Principio REST stateless
1 - Buscar libro por título 2 - Listar libros registrados 3 - Listar autores 4 - Listar autores vivos en determinado año 5 - Listar libros por idioma 6 - Top 10 libros más descargados 0 - Salir
El cierre de la aplicación incluye un pequeño toque dramático:
java case 0 -> { System.out.println("Cerrando la biblioteca..."); pausa(1000); System.out.println("Guardando los libros en los estantes..."); pausa(1200); System.out.println("Apagando las luces..."); pausa(1000); System.out.println("Hasta la próxima lectura 📖"); }
No es funcionalmente necesario pero se me hizo divertido añadirlo.
Notas personales
~El Top 10 funciona sobre los libros guardados. ~Si solo hay 1 libro… solo devuelve 1.
~La aplicación sigue el principio de persistencia local. ~La API es solo la fuente inicial de datos.
Se implementó validación para evitar duplicados en la base de datos.
📌 Estado del proyecto
✔ Funcional ✔ Cumple con los requisitos del challenge ✔ Código limpio y estructurado ✔ Con un poco de personalidad
✨ Posibles mejoras futuras
Interfaz gráfica
Dockerización
Migración completa a PostgreSQL
Paginación de resultados
Tests automatizados
Manejo de múltiples idiomas por libro
Conclusión
Literalura es un proyecto enfocado en practicar consumo de API, persistencia con JPA y consultas derivadas. Más que una app compleja, es un ejercicio sólido de backend con buenas bases.
Si quieres, puedo hacerte una versión un poco más minimalista o una un poco más estilizada tipo portfolio profesional.