He tenido la fortuna de crecer en una casa llena de libros y varias veces mientras crecía he querido organizarlos y ordenarlos de alguna forma para que fuera más fácil encontrarlos y saber qué libros había, al terminar la universidad lo intenté con un par de aplicaciones, pero ninguna me acabó de convencer, así que en cuanto empecé a aprender programación no me pude sacar la idea de la cabeza de crear yo una aplicación para ello.

Y todo empieza aquí:

API para gestionar una biblioteca casera en Java y SpringBoot

Logo de Github (sólo el contorno del gato)

El código proporcionado es una aplicación básica de Spring Boot con funcionalidad de API RESTful para gestionar una biblioteca casera.

Esto es un resumen de lo que hace el código:

  • Libro.java (Detalles del libro): describe cada libro. Para cada libro, puedes apuntar su nombre, autor y ubicación en la biblioteca.
  • LibroRepository.java (El Guardián de los Libros): Esta parte lleva un registro de todos tus libros. Sabe cómo guardar, encontrar y eliminar libros.
  • LibroController.java (El Administrador de los Libros): Te ayuda a gestionar tus libros. Entiende comandos como «Muéstrame todos los libros» o «Añade un nuevo libro».
  • BibliotecaApplication.java (El Principio): Inicia todo el sistema de la biblioteca. Es donde comienza la aventura.
  • Tests (Los Verificadores): Son pequeñas pruebas para asegurar que todo funcione correctamente. Son como amigos que se aseguran de que la herramienta haga lo que se supone que debe hacer.

Estructura del Proyecto

El proyecto está estructurado como una aplicación Spring Boot.

  • El código principal se encuentra en el directorio src/main/java/net/Karvala/Biblioteca.
  • El código incluye un controlador RESTful (LibroController), una clase entidad (Libro), una interfaz de repositorio (LibroRepository), y la clase principal de la aplicación (BibliotecaApplication).
  • Se proporcionan pruebas en el directorio src/test.

Libro Entity (Libro.java)

Representa un libro con atributos como título, autor y estantería.

  • Anotaciones como @Entity indican que es una entidad JPA.
  • Utiliza las anotaciones @Id y @GeneratedValue para la generación de la clave primaria.
captura de pantalla del código
captura de pantalla del código

Repositorio de los Libros (LibroRepository.java)

Amplia el JpaRepository, proporcionando operaciones CRUD para la entidad Libro.

Controlador de los Libros (LibroController.java)

Implementa operaciones CRUD para gestionar los libros utilizando las capacidades RESTful de Spring Web.

  • Utiliza la inyección de dependencias para inyectar una instancia de LibroRepository.
  • Define métodos para listar todos los libros, encontrar un libro por ID, crear un nuevo libro, actualizar un libro y eliminar un libro.
captura de pantalla de parte del código
captura de pantalla de parte del código

Aplicación de la Biblioteca (BibliotecaApplication.java)

La clase principal que ejecuta la aplicación Spring Boot.

Aplicación de la Biblioteca (BibliotecaApplication.java)

La clase principal que ejecuta la aplicación Spring Boot.

Tests

  • LibroControllerTest.java realiza tests de integración para el LibroController.
  • LibroControllerUnitTest.java utiliza Mockito para realizar tests unitarios para el LibroController.
captura de pantalla de parte del código

Aspectos Destacados del Código

  • Inyección de Dependencias: Se utiliza la inyección a través del constructor de LibroController para inyectar la instancia de LibroRepository.
  • Endpoints RESTful: Se implementan operaciones CRUD utilizando las anotaciones de Spring (@GetMapping, @PostMapping, @PutMapping, @DeleteMapping).
  • Manejo de las Respuestas: Utiliza ResponseEntity para tener un mayor control sobre las respuestas HTTP.
  • Tests: Las pruebas de integración (LibroControllerTest.java) utilizan TestRestTemplate para probar los puntos finales HTTP reales. Las pruebas unitarias (LibroControllerUnitTest.java) utilizan Mockito para simular el repositorio y probar métodos del controlador de manera independiente.

Cómo Funciona

  1. Entidad y Repositorio:

    La clase Libro representa un libro, y LibroRepository es una interfaz para realizar las operaciones CRUD en los libros.

  2. Controlador (LibroController.java):
    • Maneja las solicitudes HTTP relacionadas con los libros.
    • Utiliza LibroRepository para operaciones en la base de datos.
    • Define endpoints para encontrar todos los libros, encontrar un libro por ID, crear, actualizar y eliminar libros.
  3. Aplicación (BibliotecaApplication.java): Inicializa la aplicación Spring Boot.
    • Inyecta el LibroRepository.
    • Realiza operaciones CRUD en los libros.
  4. Tests:
    • LibroControllerTest.java: Tests de integración utilizando TestRestTemplate.
    • LibroControllerUnitTest.java: Tests unitarios utilizando Mockito y MockMvc.
La aplicación sigue la estructura y los principios estándar de Spring Boot, utiliza JPA para operaciones en la base de datos y ofrece puntos finales RESTful para la gestión de libros. Los tests aseguran el buen comportamiento del controlador en diferentes escenarios.